在列表中查找所有可能的对的高效而非内存消耗方式

时间:2015-01-15 13:24:12

标签: python memory

我有一个名为lemma_all_context_dict的词典,它有大约8000个键。我需要这些键的所有可能对的列表。

我用过:

pairs_of_words_list = list(itertools.combinations(lemma_all_context_dict.keys(), 2)) 

然而,当使用这一行时,我得到一个MemoryError。我有8GB的RAM,但也许我得到这个错误,因为我在这段代码中有一些非常大的词典。

所以我尝试了另一种方式:

pairs_of_words_list = []
for p_one in range(len(lemma_all_context_dict.keys())):
        for p_two in range(p_one+1,len(lemma_all_context_dict.keys())):
                pairs_of_words_list.append([lemma_all_context_dict.keys()[p_one],lemma_all_context_dict.keys()[p_two]])

但是这段代码需要大约20分钟才能运行...有没有人知道更有效的方法来解决问题?感谢

**我不认为这个问题是重复的,因为我所要求的 - 我不认为这个问题 - 是如何在没有我的电脑崩溃的情况下实现这个问题的:-P

1 个答案:

答案 0 :(得分:2)

不要建立一个列表,因为这是你得到内存错误的原因(你甚至创建了两个列表,因为那是.keys()所做的)。您可以迭代iterator(这是他们的目的):

for a, b in itertools.combinations(lemma_all_context_dict, 2):
    print a, b