生成所有可能的altrenate数字和字母序列

时间:2017-12-23 18:20:53

标签: python algorithm numpy combinations permutation

我想生成所有可能的替代数字和数字序列。例如

5j1c6l2d4p9a9h9q

6d5m7w4c8h7z4s0i

3z0v5w1f3r6b2b1z

NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter

我可以通过使用16循环来完成但是它需要30多个小时(粗略的想法)。有没有有效的方法。我希望在python中会有。

3 个答案:

答案 0 :(得分:2)

您可以使用itertools.product生成所有16多个案例:

import string, itertools
i = itertools.product(string.digits, string.ascii_lowercase, repeat=8)
j = (''.join(p) for p in i)

由于ituples的迭代器,我们需要将这些全部转换为strings(因此它们采用您想要的格式)。这是相对简单的做法,因为我们可以将每个tuple传递给generatorjoin个元素,并将其合并为一个string

我们可以看到迭代器(j)正在通过几次调用next()来工作:

>>> next(j)
'0a0a0a0a0a0a0a0a'
>>> next(j)
'0a0a0a0a0a0a0a0b'
>>> next(j)
'0a0a0a0a0a0a0a0c'
>>> next(j)
'0a0a0a0a0a0a0a0d'
>>> next(j)
'0a0a0a0a0a0a0a0e'
>>> next(j)
'0a0a0a0a0a0a0a0f'
>>> next(j)
'0a0a0a0a0a0a0a0g'

答案 1 :(得分:1)

没有"高效"这样做的方式。有2.8242954e+19种不同的可能组合,或28,242,954,000,000,000,000。如果每个组合长度为16个字符,则将所有内容存储在原始文本文件中将占用451,887,264,000千兆字节,441,296,156.25太字节,430,953.2775878906千兆字节或420.8528101444艾字节。普通消费者可用的最大硬盘是16TB(三星PM1633a)。他们花了1.2万美元。这使得存储所有这些数据的总成本为330,972,117,600美元(比尔盖茨的净值3677.46797倍)。甚至忽略所有这些驱动器占用的空间量,并忽略连接它们所需的硬件成本,并假设它们都可以在无损RAID阵列中以最高性能运行,这样就可以了使写入速度达到每秒330,972,118千兆字节。听起来很多,不是吗?即使具有该写入速度,该文件也需要22分钟才能写入,假设CPU电源,RAM速度或RAID控制器本身没有瓶颈。

来源 - 计算器。

答案 2 :(得分:0)

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的长度。 如果您不清楚代码,请尝试在某些情况下进行模拟。