我想生成所有可能的替代数字和数字序列。例如
5 c 1固体4支
6d5m7w4c8h7z4s0i
3克0 fkho 1脊椎动物1克
NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter
我可以通过使用16循环来完成它但它需要30多个小时(粗略的想法)。有没有有效的方法。我希望在python中会有。
您可以使用itertools.product
生成所有16
长例:
import string, itertools
i = itertools.product(string.digits, string.ascii_lowercase, repeat=8)
j = (''.join(p) for p in i)
由于i
是tuples
的迭代器,我们需要将这些全部转换为strings
(因此它们采用您想要的格式)。这是相对直接的做法,因为我们可以将每个tuple
传递到generator
和join
元素一起成为一个string
。
我们可以看到迭代器(j
)正在通过几次调用next()
来工作:
>>> next(j)
'0a0a0a0a0a0a0a0a'
>>> next(j)
'0a0a0a0a0a0a0a0b'
>>> next(j)
'0a0a0a0a0a0a0a0c'
>>> next(j)
'0a0a0a0a0a0a0a0d'
>>> next(j)
'0a0a0a0a0a0a0a0e'
>>> next(j)
'0a0a0a0a0a0a0a0f'
>>> next(j)
'0a0a0a0a0a0a0a0g'
没有“有效”的方法来做到这一点。有2.8242954e+19
不同的可能组合,或28,242,954,000,000,000,000
。如果每个组合长度为16个字符,则将所有内容存储在原始文本文件中将占用451,887,264,000
千兆字节,441,296,156.25
太字节,430,953.2775878906
petabytes或420.8528101444
exabytes。普通消费者可用的最大硬盘是16TB(三星PM1633a)。他们花了1.2万美元。这使得存储所有这些数据的总成本为330,972,117,600美元(比尔盖茨的净值为3677.46797倍)。甚至忽略所有这些驱动器占用的空间量,并忽略连接它们所需的硬件成本,并假设它们都可以在无损RAID阵列中以最高性能运行,这样就可以了使写入速度达到每秒330,972,118千兆字节。听起来很多,不是吗?即使具有该写入速度,该文件也需要22分钟才能写入,假设CPU电源,RAM速度或RAID控制器本身没有瓶颈。
来源 - 计算器。
import sys
n = 5
ans = [0 for i in range(26)]
all = ['a','b','A','Z','0','1']
def rec(pos, prev):
if (pos==n) :
for i in range(n):
sys.stdout.write(str(ans[i]))
sys.stdout.flush()
print ""
return
for i in all:
if(i != prev):
ans[pos] = i
rec(pos+1, i)
return
for i in all:
ans[0] = i;
rec(1, i)
基本的想法是backtracking。太慢了。但代码很短。您可以修改“全部”中的字符和序列n的长度。如果你不清楚代码,那么尝试用某些情况模拟它。