2015-10-17 39 views
-1

所以基本上,我有一个组合生成器脚本...它的工作原理是它生成的组合,然后我复制/粘贴到一个文本文件,那么难以考虑6位数的那里14亿美元的排列......还有大约130万美元呢?所以我如何使它所以当它使得它存储到.txt文件的组合,如果它崩溃...它可以从.txt文件 脚本中的最后记录的行重新启动:Python组合生成器 - 存储到.txt文件

import itertools 
from itertools import * 

lower_a = ['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'] 
num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] 

all = [] 
all = lower_a + num 

def com(): 
    for x in range(2): 
     for s in itertools.product(all, repeat=x): 
      print(''.join(s)) 

print(com()) 
+2

您是否确实需要一个包含全部14亿个排列的文件?你真的,真的吗? – TigerhawkT3

+0

yes im sure haha​​ – AKcoArts

+0

需要多长时间才能完成1.3m?如果您将代码更改为'''.join(s)'而不打印,那么在这段时间之后它还会崩溃吗?另外,你不需要将'itertools'导入两个命名空间 - 我只需要粘贴第一个(你正在使用的)并从itertools import *'中删除''。 – TigerhawkT3

回答

0

您显示的代码不是您正在运行的代码。例如,这段不能表现为你描述:

for x in range(2): 
    for s in itertools.product(all, repeat=x): 
     print(''.join(s)) 

这应在两种条件下显示所有的成员的笛卡尔乘积:

  • 当x为0
  • 当x是1

当x为零时itertools.product(any_list_at_all, repeat=0)只有一个零元素的组合,即空集。当z是1时,组合的数量等于输入列表的长度。在你的情况下,这使得总共有36个字符共36个字符,共36个字符组合。

由于在笛卡尔乘积中,输出集合的基数是输入集合的基数(对于有限集合)的乘积,这意味着product(all, range=6)有大约22亿集合返回,所以14亿来自哪里?

+0

可能是36 * 35 * 34 * 33 * 32 * 31(= 1,402,410,240)。 –

+0

它确实说*“14亿美元排列”*。 –