0

我有一个单词列表。它非常大(len(list) ~ 70,000)。我目前正在使用此代码:

replacement = "bla"
for word in data:
    if (word in unique_words):
        word = replacement

此代码需要一段时间来执行操作。有没有更快的方法来做到这一点?

4

2 回答 2

6

使用一个setfor unique_words。在确定项目是否在其中时,集合比列表快得多(请参阅Python Sets vs Lists)。

此外,这只是一个风格问题,但我认为您应该删除if. 它看起来更干净。

于 2012-05-26T13:11:42.590 回答
4

您发布的代码实际上并没有做任何替换。这是一个片段:

for key,word in enumerate(data):
   if word in unique_words:
       data[key] = replacement

这是一种更紧凑的方式:

new_list = [replacement if word in unique_words else word for word in big_list]

考虑到它的用途,我认为unique_words变量的名称很奇怪,也许应该是search_list

编辑

在您发表评论后,也许这会更好:

from collections import Counter
c = Counter(data)
only_once = [k for k,v in c.iteritems() if v == 1]

# Now replace all occurances of these words with something else

for k, v in enumerate(data):
    if v in only_once:
        data[k] = replacement
于 2012-05-26T13:25:32.867 回答