高级Python列表推导式

10 投票
6 回答
4306 浏览
提问于 2025-04-15 20:53

给定两个列表:

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

你可以使用列表推导式来生成一个过滤后的 words 列表,条件是:每个单词的长度是 n,而 chars 的长度也是 n。过滤后的列表应该只包含那些每个 i 位置的字符都在 words 中对应的第 i 个字符串里的单词。

在这个例子中,我们应该得到 ['abc', 'bca'] 作为结果。

(如果这听起来有点熟悉,这个问题曾经是之前 Google 编程大赛中的一道题)

6 个回答

4

使用zip函数:

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

或者使用enumerate函数:

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答