python - 不区分大小写的集合交集

标签 python

执行以下不区分大小写的交集的最佳方法是什么:

a1 = ['Disney', 'Fox']
a2 = ['paramount', 'fox']
a1.intersection(a2)
> ['fox']

通常我会做一个列表理解来将两者都转换为全部小写:

>>> set([_.lower() for _ in a1]).intersection(set([_.lower() for _ in a2]))
set(['fox'])

但是有点丑。有更好的方法吗?

最佳答案

使用集合理解语法稍微不那么难看:

>>> {str.casefold(x) for x in a1} & {str.casefold(x) for x in a2}
{'fox'}

算法是一样的,因为字符串的哈希值是区分大小写的,所以没有更有效的方法。

使用 str.casefold而不是 str.lower 将对国际数据表现得更正确,并且自 Python 3.3+ 起可用。

关于python - 不区分大小写的集合交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783439/

相关文章:

python - 如何生成此自定义字母数字序列?

python - 检查用户是否在 Django 模板中订阅了 dj-stripe

python - Python中的递归堆栈

python - 列表理解内的可变范围

javascript - 清理 python/django 字符串中的标签和引号,使其成为有效的 javascript 字符串

Python:定义具有依赖属性的类

python - 从elasticsearch获取字段的每个唯一组合的第一条记录

javascript - 使用 Flask 和 jQuery 上传文件

python - 列表理解示例

python - 文字云 : Bigger font for lower tf-idf values