执行以下不区分大小写的交集的最佳方法是什么:
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/