繁体   English   中英

Python for循环未迭代

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM