Yam*_*ami 1 python combinations permutation out-of-memory python-3.x
我正在尝试输出字母和数字的每个可能的 6 长度组合的列表。
我已经尝试了许多不同类型的代码,这似乎是最好的,但它不适用于我使用它的长长度。
import itertools
import pprint
letters = ["A","B","C","D","E","F","G","H","I","J","K","L","M",
"N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"0","1","2","3","4","5","6","7","8","9"]
pprint.pprint(list(itertools.product(letters, repeat=6)))
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到此错误:
MemoryError
Run Code Online (Sandbox Code Playgroud)
它确实适用于小于 5 的重复设置。
我怎样才能解决这个问题?有没有更简单或更好的方法来获得相同的结果?是否可以将其输出到文本文件而不必打印它?我不在乎是否有重复,但如果没有重复则更好。
这个网站:textmechanic.com/Combination-Generator.html 也做了我想要的同样的事情,但它不适用于我正在使用的大量对象和组合的长度。如果已经有这样的列表,那就可以了。
或者根本不可能完成这件事?
您正在尝试创建一个包含 36 ** 6 = 2176782336 个 6 个 1 字符字符串元组的列表。这超过了 20 亿(20 亿)。仅仅为了保存元组对象(在我的 Mac 上每个元组对象小 104 字节)就需要至少 210 GB 的内存。
不要试图列出一份清单;打印生成的值,然后再次丢弃它们:
for combo in itertools.product(letters, repeat=6):
print(''.join(combo))
Run Code Online (Sandbox Code Playgroud)
要将其写入文件,请写入str.join()结果加上换行符:
with open('outputfile.txt', 'w') as outfile:
for combo in itertools.product(letters, repeat=6):
outfile.write(''.join(combo) + '\n')
Run Code Online (Sandbox Code Playgroud)
这需要很少的 RAM,但您将需要 14GB 的磁盘空间来存储 20 亿乘以 7 的字符(包括换行符)。
| 归档时间: |
|
| 查看次数: |
2803 次 |
| 最近记录: |