繁体   English   中英

不区分大小写的集合交集

Case-insensitive set intersection

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

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

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

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

2 个回复

使用set comprehension语法稍微不那么难看:

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

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

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

这里的定义存在一些问题,例如,字符串在具有两个不同情况的同一集合中出现两次,或者在两个不同的集合中出现(我们保留哪一个?)。

话虽这么说,如果你不关心,并且你想要多次执行这种交叉,你可以创建一个case不变的字符串对象:

class StrIgnoreCase:
  def __init__(self, val):
    self.val = val

  def __eq__(self, other):
    if not isinstance(other, StrIgnoreCase):
        return False

    return self.val.lower() == other.val.lower()

  def __hash__(self):
    return hash(self.val.lower())

然后我只维护两个集合,使它们包含这些对象而不是纯字符串。 每次创建新集和每个交集操作都需要较少的转换。

1 python中的集合不区分大小写

我有一个由多个列表生成的列表。 该组合列表包含最终用户生成的名称。 因此,包含相似的名称,但具有不同的大写/小写字符。 我想过滤出包含相同字符的名称,并将第一个保留在原始列表中。 例如,我有以下列表: 如果我运行: 我得到: 我只想保留第一个具有相同字符的名称 ...

2 如何找到不区分大小写的2个数组的交集?

我想找到2个数组之间的交集。 $有效 $抛光 我使用array_intersect并将返回值存储在$perfect变量中。 $perfect = array_intersect( $valid, $polish ); 到目前为止,一切都很好,除了一件事,我希 ...

2015-02-05 20:21:31 2 70   php
3 检查两个列表以确保不区分大小写的交集?

我有两个清单 我希望返回一个新列表,其中包含两个列表中都存在的值。 这些值不应像keepAll那样重复。 这是我最初的方法: 而且效果很好。 但这是区分大小写的,因此AbC与abc不同。 我需要比较不区分大小写。 还有另一种方法吗? ...

2018-02-05 22:42:34 4 882   java/ list
4 不区分大小写的时候

默认情况下,是否可以when String比较时不区分大小写? 这有太多重复的代码! 另请注意, MessagingClient.RTC_SUBTYPE是enum class ,第一行的subtype是从某个客户端接收的,因此我们必须对其进行相应处理。 ...

2018-04-17 12:02:45 2 1763   kotlin
5 不区分大小写

我试图让用户输入不敏感的字母a,b,c,d。 试图使用UCase,但它不起作用(不确定我是否使用它错了)。 我在Visual Studio 2012中使用VB。 任何参考都会很棒。 ...

6 区分大小写

我在网上找到了一个非常适合我的php搜索脚本。 即时通讯有大小写敏感的问题。 此搜索链接到html表单输入,并且只会返回与搜索到的大小写匹配的结果。 有没有解决的办法? ...

2015-08-28 14:29:35 1 45   php/ case
7 区分大小写吗?

我很困惑。 当我发布以下内容时 这个返回{0,0,0}(不正确) 这个返回{1.23,4.56,789}(正确) 唯一的区别是我在结构定义中使用大写字母。 我想念什么吗? 这是错误吗? ...

2014-10-19 02:23:56 1 1727   go
8 不区分大小写的“in”

我喜欢用这个表达 其中USERNAMES是一个列表。 有什么方法可以匹配不区分大小写的项目还是我需要使用自定义方法? 只是想知道是否需要为此编写额外的代码。 ...

9 区分大小写

如何重写LIKE "M%"以匹配以下内容: “ MAneany”“ MAree”“ MCrea” 但不是这些: “ McCrea”“ MacCrea” 即大写M,后跟大写字母。 ...

2018-11-18 20:59:31 1 42   sqlite
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM