我有一个列表(大约200个)包含不同的字符串:
lists = [
['a', 'b', 'c', 'g', ...],
['b', 'c', 'f', 'a', ...],
...
]
现在我想查找包含两个给定字符串的所有列表,按给定顺序。
例如,给定('a', 'g')
,['a', 'b', 'c', 'g', ...]
将匹配。
这样做的pythonic方式是什么?
答案 0 :(得分:1)
在我看来,最恐怖的方式是:
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
和x2
是相同的值,那么翻译为英语为“如果x1在列表中,而x2是第一个x1之后的部分”,它也会按预期工作。