给出两个清单:
chars = ['ab', 'bc', 'ca']
words = ['abc', 'bca', 'dac', 'dbc', 'cba']
如何通过以下条件使用列表推导来生成words
的过滤列表:假设每个单词的长度为n
且chars
的长度为n
同样,过滤后的列表应该只包含每个i
个字符位于i
中words
字符串中的字词。
在这种情况下,我们应该得到['abc', 'bca']
。
(如果这对任何人来说都很熟悉,这是之前Google代码堵塞中的一个问题)
答案 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]]