Python 快速查找包含两个特定项的列表的方法?
我有一个列表(大约200个)包含不同的字符串:Python 快速查找包含两个特定项的列表的方法?,python,Python,我有一个列表(大约200个)包含不同的字符串: lists = [ ['a', 'b', 'c', 'g', ...], ['b', 'c', 'f', 'a', ...], ... ] 现在,我想找出所有包含两个给定字符串的列表,按给定顺序排列 例如,给定('a',g'),['a','b','c','g',…]将匹配 什么是python式的方法呢?在我看来,最python式的方法应该是: selection = [L for L in lists if
lists = [
['a', 'b', 'c', 'g', ...],
['b', 'c', 'f', 'a', ...],
...
]
现在,我想找出所有包含两个给定字符串的列表,按给定顺序排列
例如,给定('a',g')
,['a','b','c','g',…]将匹配
什么是python式的方法呢?在我看来,最python式的方法应该是:
selection = [L for L in lists
if x1 in L and x2 in L and L.index(x1) < L.index(x2)]
翻译成英语的“如果x1在列表中,x2是第一个x1后面的部分”,如果x1
和x2
是相同的值,它也会像预期的那样工作。这是一个小问题。这缺乏任何研究工作。我同意索引
是最好的方法,但请注意,只返回第一次出现的值的索引。所以match('h','k',['a','k','h','k'])
返回False
,这可能是您想要的,也可能不是您想要的。@ajcr:您是对的。我添加了一个版本来处理这个问题,还有x1==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)]
selection = [L for L in lists
if x1 in L and x2 in L[L.index(x1)+1:]]