簡體   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