首页 > 解决方案 > 不区分大小写的集合交集

问题描述

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

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

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

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

但这有点难看。有一个更好的方法吗?

标签: python

解决方案


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

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

该算法是相同的,并且没有任何更有效的方法可用,因为字符串的哈希值区分大小写。

对于国际数据,使用str.casefold代替str.lower将表现得更正确,并且从 Python 3.3+ 开始可用。


推荐阅读