【发布时间】:2012-03-27 01:32:55
【问题描述】:
for word in wordStr:
word = word.strip()
print word
上面的代码在分析一个包含数千个单词的.txt时,为什么只返回.txt文件中的最后一个单词?我需要做什么才能让它返回文本文件中的所有单词?
【问题讨论】:
-
这不会返回任何东西;它打印一些东西。你用
return返回东西。
标签: python
for word in wordStr:
word = word.strip()
print word
上面的代码在分析一个包含数千个单词的.txt时,为什么只返回.txt文件中的最后一个单词?我需要做什么才能让它返回文本文件中的所有单词?
【问题讨论】:
return返回东西。
标签: python
因为您在循环中覆盖了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 个单词。
【讨论】:
要打印wordStr 中的所有单词(假设wordStr 是某种可迭代的返回字符串),您可以简单地编写
for word in wordStr:
word = word.strip()
print word # Notice that the only difference is the indentation on this line
Python 关心缩进,因此在您的代码中,打印语句位于循环之外并且只执行一次。在修改后的版本中,打印语句在循环内,每个单词执行一次。
【讨论】:
那是因为变量word是当前单词,完成文件后是最后一个:
def stuff():
words = []
for word in wordStr:
words.append(word.strip())
print words
return words
【讨论】:
List comprehensions 应该让您的代码更时髦、更 Python 化。
wordStr = 'here are some words'
print [word.strip() for word in wordStr.split()]
返回
['here', 'are', 'some', 'words']
【讨论】:
如果您不知道为什么您的示例中的代码仅“返回”最后一个单词(实际上它没有返回任何内容,而是打印一个单词),那么恐怕这里没有什么可以帮助您很多。
我知道这听起来充满敌意,但我不想这样。从您的问题来看,您似乎在扔一些 Python 知识,而对 Python 编程的基础知识却很少真正了解。
现在不要误会我的意思,尝试新事物是一项很棒的早期学习活动,而有一项任务来激励您的学习也是一种很好的方式。所以我不想告诉你停下来!但是,无论您是想学习编程还是只是有一项需要您编写程序的任务,如果不了解基础 导致您的示例无法按照您的意愿执行的潜在问题。
我们可以在这里告诉你:
for word in wordStr:
word = word.strip()
print word
是一个程序,大致意思是“对于wordStr中的每个word,将word绑定到word.strip()的结果;然后打印word的内容”,而你想要的很可能:
for word in wordStr:
word = word.strip()
print word
这是一个程序,大致意思是“对于wordStr中的每个word,将word绑定到word.strip()的结果,然后打印word”。这解决了你的直接问题。但是你会遇到更多性质非常相似的问题,如果不了解基础知识,你将无法看到它们都是“同类”,你只会结束在这里提出更多问题。
您需要对 Python 中的变量、语句、循环等如何工作有一个基本的了解。如果您继续尝试在此处应用代码并提出问题,您可能最终会有所收获。但是 Stack Overflow 并不是获得这种理解的最有效的资源。更好的选择是给自己找一本好书或教程(http://docs.python.org/tutorial/ 有官方教程)。
肥皂盒到此为止。
【讨论】: