Python 检查任何列表中的所有项是否在字符串中的最佳方法
我有一个列表,如Python 检查任何列表中的所有项是否在字符串中的最佳方法,python,list-comprehension,Python,List Comprehension,我有一个列表,如mylist=[[“1”、“2”]、[“abc”、“def”]]和一个字符串,如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 myst
mylist=[[“1”、“2”]、[“abc”、“def”]]
和一个字符串,如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")
这会更快,因为它一看到真实值就停止迭代(短路)。它还有一个副作用,就是更容易阅读
谢谢你提到这一点
基准:
>>> 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
>>> 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