[英]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.