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

时间:2012-03-27 01:32:55

标签: python

for word in wordStr:
    word = word.strip()
print word

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

5 个答案:

答案 0 :(得分:1)

因为你在循环中覆盖了word,所以不是一个好主意。您可以尝试以下方式:

wordlist = ""
for word in wordStr:
    wordlist = "%s %s"%(wordlist,word.strip())
print wordlist[1:]

这是相当原始的Python,我确信有更多的Pythonic方法可以使用列表推导和所有新奇的东西:-)但我通常更喜欢可读性。

这样做是为了在单独的字符串中维护单词列表,然后将每个被剥离的单词添加到该列表的末尾。最后的[1:]只是为了摆脱在第一个单词被添加到空单词列表末尾时添加的初始空格。

最终会因为字数变得很大而受到影响,因为在字符串末尾处理事情不如其他数据结构优化。但是,即使最多10,000个单词(删除了打印件),在执行时间的第二个时间内它仍然很好

在50,000个单词上它变得明显,在我的盒子上花了3秒钟。如果您要处理这种数量,您可能会选择一个真实的基于列表的解决方案(相当于上面但具有不同的底层数据结构):

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

大约需要0.22秒(没有打印)来完成我的整个字典文件,大约110,000个单词。

答案 1 :(得分:1)

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

即可。
for word in wordStr:
    word = word.strip()
    print word # Notice that the only difference is the indentation on this line

Python关心缩进,所以在你的代码中,print语句在循环之外,只执行一次。在修改后的版本中,print语句位于循环内部,每个单词执行一次。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

List comprehensions应该让你的代码变得更加狡猾,更加pythonic。

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

返回

['here', 'are', 'some', 'words']

答案 4 :(得分:0)

如果你不知道为什么你的例子中的代码只是“返回”了最后一个单词(实际上它没有返回任何东西,它只打印一个单词),那么我担心这里的任何内容都无法帮助你得多。

我知道这听起来充满敌意,但我不希望如此。从您的问题看来,您正在抛弃一些Python,而对Python中编程的基本基础知之甚少。

现在不要误会我的意思,尝试填充是一项很好的早期学习活动,并且有一项激励学习的任务也是一种很好的方法。所以我不想告诉你停下来!但是,无论你是想学习编程还是只是有一个需要你编写程序的任务,如果不了解基础<,你就不会走得太远/ strong>使您的示例无法按照您的意愿执行操作的潜在问题。

我们可以在这告诉你:

for word in wordStr:
    word = word.strip()
print word

是一个程序,粗略地表示“wordwordStr word,将word.strip()绑定到word的结果;然后打印for word in wordStr: word = word.strip() print word 的内容{1}}“,而你想要的可能是:

word

这是一个程序,大致意味着“wordStrword word.strip(),将word绑定到{{1}},然后打印{{1}}”。这解决了你当前的问题。但是你会遇到更多类似性质的问题,如果不了解基础知识,你将无法看到它们都是“一种”,你就会结束在这里提出更多问题。

您需要的是基本了解变量,语句,循环等在Python中的工作方式。如果您只是继续尝试应用代码并在此处提出问题,您可能会最终获得。但Stack Overflow并不是获得理解的最有效资源;一个更好的选择是找到一本好的书或教程(在http://docs.python.org/tutorial/有一个正式的)。

这里有肥皂盒。