我使用的是Python 3.5,我的代码是
words = open("wordlist.txt").readlines()
words = [k[:-2] for k in words]
noletters = ["b", "d", "f", "g", "h", "i", "j", "k", "l", "p", "q", "t", "y"]
for n in words:
for i in n:
if i in noletters:
words.remove(n)
break
words.sort()
words.sort(key = len)
print(words)
此处wordlist.txt
是really, really, really long list of words。首先,我从列表中的每个项目中删除一些不必要的字符,然后我最终得到一个列表,其中每个项目都是一个单词 - 类似'hello'
或yugoslavia
。到目前为止这是有效的。
然后,我创建了一个字母列表,我不希望这些字母出现在我从程序中获得的任何单词中。然后对于列表中的每个项目,我检查单词中的每个字母,如果字母在列表中,我从列表中删除单词并打破检查字母的内部循环(这可以防止系统尝试删除已被删除的内容。然后,我按字母顺序对列表进行排序,并按照单词的长度对列表进行打印。
问题:
words.remove(n)
行之后,以及在break
行之后打印,以查看它是什么时候转到一个新词)。 'o'
在列表中没有,但它已被添加,以及几个空白字符串(''
)等等 - 它看起来像是字母表中每个字母的所有可能组合。答案 0 :(得分:3)
来自文档for statement。
如果您需要修改您在内部迭代的序列 循环(例如复制所选项目),建议使用 您首先制作副本。迭代序列不会 隐含地复制。
如果我不误解你的意思,也许你可以尝试做一个浅薄的副本:
for n in words[:]:
for i in n:
if i in noletters:
words.remove(n)
break
或许您可以使用此列表理解:
words=[n for n in words if not any([i in noletters for i in n])]
希望这有帮助。