繁体   English   中英

检查任何列表列表中的所有项目是否都在字符串中的最佳方法

[英]Best way to check if all of the items in any of a list of lists are in a string

我有一个像mylist = [["1", "2"], ["abc", "def"]]这样的mystr = "1 2"和一个像mystr = "1 2"这样的字符串。

我想检查mylist任何列表是否在字符串中包含所有字符串。

我通过执行以下操作实现了这一点。

if True in [all(keyword in mystr for keyword in keywords) for keywords in mylist]:
    print("yes")

有没有更快的方法?

是的,使用any .

if any(all(keyword in mystr for keyword in keywords) for keywords in mylist):
    print("yes")

这更快,因为它一旦看到真值就停止迭代(短路)。 它还具有更易于阅读的附带好处。

感谢jonrsharpe 在评论中提到这一点

matcher = mystr.__contains__
any(all(map(matcher, keywords)) for keywords in mylist)

基准:

>>> min(repeat(lambda: any(all(map(matcher, keywords)) for keywords in mylist), repeat=20))
1.1285329000002093
>>> min(repeat(lambda: any(all(map(mystr.__contains__, keywords)) for keywords in mylist), repeat=20))
1.2246240000004036
>>> min(repeat(lambda: any(all(keyword in mystr for keyword in keywords) for keywords in mylist), repeat=20))
1.3369910999999775
>>> min(repeat(lambda: True in [all(keyword in mystr for keyword in keywords) for keywords in mylist], repeat=20))
1.726889200000187

暂无
暂无

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

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