我有一個列表的列表(200)包含不同的字符串:快速查找列表的方法包含兩個特定項目?
lists = [
['a', 'b', 'c', 'g', ...],
['b', 'c', 'f', 'a', ...],
...
]
現在我想找出所有包含兩個給出的字符串,給定的順序名單。
例如,給定('a', 'g')
,['a', 'b', 'c', 'g', ...]
將被匹配。
這樣做的pythonic方式是什麼?
我有一個列表的列表(200)包含不同的字符串:快速查找列表的方法包含兩個特定項目?
lists = [
['a', 'b', 'c', 'g', ...],
['b', 'c', 'f', 'a', ...],
...
]
現在我想找出所有包含兩個給出的字符串,給定的順序名單。
例如,給定('a', 'g')
,['a', 'b', 'c', 'g', ...]
將被匹配。
這樣做的pythonic方式是什麼?
在我看來,最Python的方式是:
selection = [L for L in lists
if x1 in L and x2 in L and L.index(x1) < L.index(x2)]
的缺陷是,它會搜索每個元素兩次,第一次檢查存在(忘記指數)和第二檢查的順序。
另一種可能是
def match(a, b, L):
try:
return L.index(a) < L.index(b)
except ValueError:
return False
selection = [L for L in lists if match(x1, x2, L)]
但我覺得稍微醜陋,除非性能是一個問題,我不會使用它。
相反,如果所需要的邏輯是接受含有[... x2 ... x1 ... x2 ...]
列表則校驗不同的是:
selection = [L for L in lists
if x1 in L and x2 in L[L.index(x1)+1:]]
其翻譯成英文爲「如果x1爲在列表中,X 2是以下的第一X1的部分」如果x1
和x2
的值相同,那麼該功能也可以按預期工作。
爲什麼downvotes? – wong2 2014-12-07 14:12:33
這是一個微不足道的問題。這沒有任何研究工作。 – simonzack 2014-12-07 14:14:30