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+ 开始可用。
推荐阅读
- c++ - #c++错误#终端中的数字是什么意思?cppfilename.cpp: 5:1:
- c# - 当我更改实时服务器 asp.net 上的根目录时,我的 Web 服务页面未运行
- javascript - 节点js中位置0的json中的语法错误意外令牌u
- netlogo - 圆形竞技场中的运动模拟
- python - 如何处理未找到工作表的错误?
- python - 在 Python 中链接用户名和密码
- javascript - SOCKET.io 没有监听端口
- xml - Mulesoft DataWeave 2.0 - 有条件地更改单个嵌套值
- matplotlib - Matplotlib,如何仅对简单的线图进行一次动画处理
- r - 我可以让这两个 ggplot 输出静音吗?