Python 快速查找包含两个特定项的列表的方法?

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

我有一个列表(大约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 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:]]