高级Python列表理解

时间:2010-03-26 10:30:46

标签: python list-comprehension

给出两个清单:

chars = ['ab', 'bc', 'ca']
words = ['abc', 'bca', 'dac', 'dbc', 'cba']

如何通过以下条件使用列表推导来生成words的过滤列表:假设每个单词的长度为nchars的长度为n同样,过滤后的列表应该只包含每个i个字符位于iwords字符串中的字词。

在这种情况下,我们应该得到['abc', 'bca']

(如果这对任何人来说都很熟悉,这是之前Google代码堵塞中的一个问题)

6 个答案:

答案 0 :(得分:19)

>>> [word for word in words if all(l in chars[i] for i, l in enumerate(word))]
['abc', 'bca']

答案 1 :(得分:12)

[w for w in words if all([w[i] in chars[i] for i in range(len(w))])]

答案 2 :(得分:3)

使用zip:

[w for w in words if all([a in c for a, c in zip(w, chars)])]

或使用枚举:

[w for w in words if not [w for i, c in enumerate(chars) if w[i] not in c]]

答案 3 :(得分:0)

这可行,使用index

[words[chars.index(char)] for char in chars if char in words[chars.index(char)]]

我错过了什么吗?

答案 4 :(得分:0)

更简单的方法:

yourlist = [ w for w in words for ch in chars if w.startswith(ch) ]

答案 5 :(得分:-1)

为什么这么复杂?这也有效:

[words[x] for x in range(len(chars)) if chars[x] in words[x]]