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

问题描述 投票:1回答:3

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

5 c 1固体4支

6d5m7w4c8h7z4s0i

3克0 fkho 1脊椎动物1克

NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter

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

python algorithm numpy combinations permutation
3个回答
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
投票

没有“有效”的方法来做到这一点。有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控制器本身没有瓶颈。

来源 - 计算器。


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的长度。如果你不清楚代码,那么尝试用某些情况模拟它。

© www.soinside.com 2019 - 2024. All rights reserved.