Python 连接大量列表的更有效方法?

Python 连接大量列表的更有效方法?,python,Python,我有大量的句子,仅仅超过100000个。每本书平均包含10个单词。我正试图把它们放在一个大的列表中,这样我就可以让我们从藏品库中找到计数器,告诉我每个单词出现的频率。我目前正在做的是: from collections import Counter words = [] for sentence in sentenceList: words = words + sentence.split() counts = Counter(words) 我想知道是否有办法更有效地做同样的事情。我已

我有大量的句子,仅仅超过100000个。每本书平均包含10个单词。我正试图把它们放在一个大的列表中,这样我就可以让我们从藏品库中找到计数器,告诉我每个单词出现的频率。我目前正在做的是:

from collections import Counter
words = []
for sentence in sentenceList:
    words = words + sentence.split()
counts = Counter(words)
我想知道是否有办法更有效地做同样的事情。我已经等了将近一个小时,等待这段代码完成执行。我认为连接是造成这一过程耗时太长的原因,因为如果我用printSession.split替换words=words+句子.split行,它将在几秒钟内完成执行。非常感谢您的帮助。

您可以使用extend:

或者,像这样的列表:

words = [word for sentence in sentenceList for word in sentence.split()]
如果您以后不需要文字,可以将生成器传递到计数器:

您可以使用扩展:

或者,像这样的列表:

words = [word for sentence in sentenceList for word in sentence.split()]
如果您以后不需要文字,可以将生成器传递到计数器:


如果你只想计算元素的数量,就不要建立一个大的、占用内存的列表。继续使用新的iterables更新计数器对象:

counts = Counter()
for sentence in sentenceList:
    counts.update(sentence.split())

如果你只想计算元素的数量,就不要建立一个大的、占用内存的列表。继续使用新的iterables更新计数器对象:

counts = Counter()
for sentence in sentenceList:
    counts.update(sentence.split())

是的,您使用的是二次时间算法,因为在每次迭代中,您都会重建一个全新的列表。改为,.extend或.append到words,这将有效地就地修改列表。每次执行words+句子.split时,您都会创建一个新列表,其中包含列表中项目的浅表副本。这会影响您的性能。@user3483203它不会对列表中的项目进行浅层复制,也不会复制列表中的项目。如果需要词频,为什么不使用字典?@prashantrana计数器是一个字典。是的,您使用的是二次时间算法,因为在每次迭代中,您将重新生成一个全新的列表。改为,.extend或.append到words,这将有效地就地修改列表。每次执行words+句子.split时,您都会创建一个新列表,其中包含列表中项目的浅表副本。这会影响您的性能。@user3483203它不会对列表中的项目进行浅层复制,它根本不会复制列表中的项目。如果需要词频,为什么不使用字典?@prashantrana Counter是一个字典。使用extend可以使它几乎立即完成。谢谢你的帮助!使用extend几乎可以立即完成。谢谢你的帮助!这是有道理的,特别是因为我以后根本不需要这个列表。谢谢你的提示!这是有道理的,特别是因为我以后根本不需要这个列表。谢谢你的提示!