これが私のコードで、いくつかのメモがあります:
import re
import itertools
nouns = ['bacon', 'cheese', 'eggs', 'milk', 'houses', 'dog']
CC = ['and', 'or']
def search_and_replace(text):
noun_patt = r'\b(' + '|'.join(nouns) + r')\b'
CC_patt = r'\b(' + '|'.join(CC) + r')\b'
patt = r'({0},? )+{1} {0}'.format(noun_patt, CC_patt)
searched = re.search(patt, text)
phrase = searched.group()
print "Check re.search match object exists:", phrase # "bacon, eggs, and milk" prints
perm_phrase = itertools.permutations(phrase)
print "Check permutated list exists:", perm_phrase # permutation object position in memory prints
perm_phrase_list = list(perm_phrase)
print "Permutated object as list:", perm_phrase_list # THIS IS WHERE MEMORY MAXES AND COMPUTER FREEZES!!!
# So print does not happen.
return perm_phrase_list
def main():
text = "I like bacon, eggs, and milk"
print search_and_replace(text)
if __name__ == '__main__':
main()
コード内のメモからわかるように、コード行はperm_phrase_list = list(perm_phrase)
大量の物理メモリを占有するため、コンピューターがフリーズします。(コードの各行の後に印刷して、問題がどこから始まるかを把握しました。通常、関数内では印刷しません)。順列からこのリストを作成しようとした時点で、なぜこれが起こるのだろうか?
このコードで permutations メソッドを使用できれば非常に便利です! それ以外の場合は、リスト内の要素の並べ替えに相当するものを作成する必要があります。
私はPython 2.7を使用しています