Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查任何列表中的所有项是否在字符串中的最佳方法_Python_List Comprehension - Fatal编程技术网

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