Python for循环只返回多个单词列表中的最后一个单词

Python for循环只返回多个单词列表中的最后一个单词,python,Python,当上面的代码分析一个包含数千个单词的.txt时,为什么它只返回.txt文件中的最后一个单词?我需要做什么才能让它返回文本文件中的所有单词?因为您正在覆盖循环中的word,这不是一个好主意。您可以尝试以下方法: for word in wordStr: word = word.strip() print word 这是一种相当原始的Python,我相信有一种更具Python风格的方法,可以通过列表理解和所有新的东西来实现:-),但我通常更喜欢尽可能的可读性 这样做的目的是在一个单独的字符

当上面的代码分析一个包含数千个单词的.txt时,为什么它只返回.txt文件中的最后一个单词?我需要做什么才能让它返回文本文件中的所有单词?

因为您正在覆盖循环中的
word
,这不是一个好主意。您可以尝试以下方法:

for word in wordStr:
    word = word.strip()
print word
这是一种相当原始的Python,我相信有一种更具Python风格的方法,可以通过列表理解和所有新的东西来实现:-),但我通常更喜欢尽可能的可读性

这样做的目的是在一个单独的字符串中维护一个单词列表,然后将每个剥离的单词添加到该列表的末尾。结尾处的
[1://code>只是为了去掉在将第一个单词添加到空单词列表末尾时添加的初始空格

随着字数的增加,它最终会受到影响,因为将内容固定到字符串的末尾比其他数据结构要差。然而,即使多达10000个字(去掉打印),它的执行时间仍然不足一秒

在50000字的时候,它变得很明显,在我的盒子上花了3秒钟。如果您要处理这种数量,您可能会选择真正的基于列表的解决方案,如(与上面相同,但具有不同的底层数据结构):


这大约需要0.22秒(不打印)来完成我的整个字典文件,大约110000个单词。

要打印
wordStr
中的所有单词(假设
wordStr
是某种返回字符串的可编辑文件),您只需编写

wordlist = []
for word in wordStr:
    wordlist.append (word.strip())
print wordlist

Python关心缩进,因此在代码中,print语句在循环之外,只执行一次。在修改后的版本中,print语句位于循环内,每个字执行一次。

这是因为变量字是当前字,在完成文件时是最后一个字:

for word in wordStr:
    word = word.strip()
    print word # Notice that the only difference is the indentation on this line
这会让你的代码更时髦,更通俗

def stuff():
    words = []
    for word in wordStr:
        words.append(word.strip())
    print words
    return words
返回

wordStr = 'here are some words'
print [word.strip() for word in wordStr.split()]

如果您不知道为什么示例中的代码只“返回”最后一个单词(实际上它不返回任何内容,它只打印一个单词),那么这里恐怕没有什么对您有很大帮助

我知道这听起来很敌意,但我不想这样。从您的问题来看,您似乎是在将Python的一些片段放在一起,而对Python编程的基本原理几乎没有真正的理解

别误会我的意思,尝试东西是一个很好的早期学习活动,有一个任务来激励你的学习也是一个很好的方法。所以我不想让你停下来!但是,无论你是想学习编程,还是仅仅为了完成一项需要你编写程序的任务,如果你不理解基本的问题,你就无法取得很大进展,因为这些问题使你的例子无法达到你想要的效果

我们可以在这里告诉您:

['here', 'are', 'some', 'words']
是一个程序,大致意思是“对于
wordStr
中的每个
word
,将
word
绑定到
word.strip()
的结果;然后,打印
word
的内容”,而您想要的可能是:

for word in wordStr:
    word = word.strip()
print word
这是一个程序,大致意思是“对于
wordStr
中的每个
word
,将
word
绑定到
word.strip()
的结果,然后打印
word
”。这就解决了你眼前的问题。但你会遇到更多性质非常相似的问题,如果你不了解这些基本问题,你将无法看到它们都是“同类的”,你会在这里问更多的问题

您需要的是基本了解变量、语句、循环等在Python中的工作方式。如果您继续尝试应用代码并在这里提问,您可能最终会获得这一点。但是堆栈溢出并不是获得这种理解的最有效的资源;一个更好的选择是给自己找一本好书或一本教程(在网上有一本官方的)


这是肥皂盒的结尾。

@user1294377:事实上,如果你只想打印,这可能是一个比我更好的解决方案。它不会为列表占用大量存储空间。这不是维护列表。。。您反复构建新字符串,其中包含迄今为止看到的所有由空格分隔的单词。构建每个字符串都是O(n),所以总体上是O(n^2)。这是一种非常低效的方法来完成一项非常简单的任务;在我看来,它也比使用列表理解等“新奇事物”的简单方法复杂得多,可读性差得多。这是你的观点,@Ben,你有权这么做。这就是为什么我说“有点像”,还提到了其他东西。问题中没有任何内容表明需要列表,只是他们希望返回单词。至于性能,问题是数千个单词,它在大约0.32秒内完成10公里。当你达到50K时,它在大约3秒的时间内变得明显,但这取决于字数。不,但你声明你正在维护一个列表,严格来说这不是你的代码所做的。虽然非正式地说很好,但对于一个显然仍然是Pythoner初学者(如果不是程序员初学者的话)的人来说,这可能不是一件好事。我真的很惊讶有人会发现这比循环或列表理解更具可读性,但是的,可读性肯定不是一个客观的主题。啊,我现在明白了“列表”的来源,我的误解。我实际上并不是指正式Python意义上的列表,只是一个单词列表(在列表、数组、树中,或者在本例中是字符串)。我会澄清的。这不会返回任何东西;它打印出一些东西。您使用
return
返回物品。
for word in wordStr:
    word = word.strip()
print word
for word in wordStr:
    word = word.strip()
    print word