[英]Python for loop not iterating
我正在尝试遍历字符串列表,如果它们的长度等于用户输入的长度,则将它们添加到字典中。 当最后一个循环运行时,它仅运行一次。 我知道这是因为字典中的第一个单词长8个字符,并且当用户输入为8时,它仅打印该单词,而不打印其他8个字符的单词。 如果输入为3,则会打印一个空字典。 为什么我的循环没有遍历列表行列表中的所有单词?
wordLength = raw_input("Enter a word length ")
word_dict = {}
infile = open("dictionary.txt")
for line in infile:
line = line.strip()
linelist = line.split(" ")
for word in linelist:
if len(word) == int(wordLength):
if len(word) in word_dict:
word_dict[len(word)] = word_dict[len(word)].append(word)
else:
word_dict[len(word)] = word
print word_dict
每次您的第一个循环运行时,都会将线linelist
设置为新值,并覆盖所有旧值。 在第一个循环运行之后,行linelist
将仅包含文件最后一行的split
结果。 每次处理文件的一行时,您都将丢弃对上一行所做的任何操作。
如果要构建词典文件中所有单词的列表,则需要制作一个列表,并将其附加到for line in infile
循环中for line in infile
每次迭代中。
另外,如果每一行只是一个单词,那么在每一行上使用split
并没有多大意义,因为不会进行拆分。
您的第二个循环没有缩进,因此只能在linelist
的最后一个值上运行它。
for line in infile:
line = line.strip()
linelist = line.split(" ")
每次执行linelist = line.split(" ")
,都会用最后一行中的单词替换旧的行列表。 该列表最终仅保留最后一行中的单词。 如果要从整个文件中提取单词,请创建一个单行列表,并用新单词扩展它:
linelist = []
for line in infile:
# split with no argument splits on any run of whitespace, trimming
# leading and trailing whitespace
linelist += line.split()
# ^ this means add the elements of line.split() to linelist
但是,由于显然每个单词都在自己的行上,因此您甚至不应该使用split
:
words = [line.strip() for line in infile]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.