在列表中查找所有可能对的高效且不消耗内存的方法
Efficient and not memory consuming way to find all possible pairs in list
我有一本名为 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
不要建立一个列表,因为那是你得到内存错误的原因(你甚至创建了两个列表,因为那是 .keys()
所做的)。您可以遍历 iterator
(这是他们的目的):
for a, b in itertools.combinations(lemma_all_context_dict, 2):
print a, b
我有一本名为 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
不要建立一个列表,因为那是你得到内存错误的原因(你甚至创建了两个列表,因为那是 .keys()
所做的)。您可以遍历 iterator
(这是他们的目的):
for a, b in itertools.combinations(lemma_all_context_dict, 2):
print a, b