如何将删除列表中含指定字符元素的嵌套循环代码转换为正确的单行列表推导式
解决列表推导式筛选单词的问题
嘿,我来帮你搞定这个列表推导式的问题!
首先得说清楚你之前的代码为什么不对:你写的列表推导式把遍历顺序和判断逻辑搞反了——你先遍历letters里的每个字母,再遍历单词,然后把整个words列表作为元素添加进去,这就导致每满足一次letter not in word的条件,就会把最终的words列表重复输出一次,自然得到了12个重复的元素。
正确的单行列表推导式写法
我们需要换个逻辑:针对每个单词,判断它是否完全不包含letters中的任何一个字母。这里可以用Python的all()函数来实现这个判断,它会检查迭代器里的所有条件是否都为True。
words = ['AIBONITO', 'BICINIUM', 'LIMONIUM', 'PICKNICK', 'SILENIUM', 'TITANIUM'] letters = 'ADEOLR' print([word for word in words if all(letter not in word for letter in letters)])
代码解释
- 外层遍历
words中的每一个word - 条件部分
all(letter not in word for letter in letters)的意思是:对于当前单词,letters里的每一个字母都不在这个单词中 - 只有满足这个条件的单词,才会被保留到新的列表里
运行这段代码,你会得到和原来嵌套循环完全一致的输出:
['BICINIUM', 'PICKNICK']
补充说明
其实你原来的嵌套循环直接在遍历列表时修改它(words.remove(word))是存在潜在风险的(比如可能会跳过某些元素),而列表推导式是创建一个新列表,逻辑更清晰也更安全,这也是推荐的写法哦。
内容的提问来源于stack exchange,提问作者MaxK
相关产品推荐
相关产品推荐

