Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成所有可能的altrenate数字和字母序列_Python_Algorithm_Numpy_Combinations_Permutation - Fatal编程技术网

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

Python 生成所有可能的altrenate数字和字母序列,python,algorithm,numpy,combinations,permutation,Python,Algorithm,Numpy,Combinations,Permutation,我想生成所有可能的替代数字和数字序列。比如说 5J1C6L2DP4P9A9H9Q 6d5m7w4c8h7z4s0i 3z0v5w1f3r6b2b1z NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter 我可以通过使用16个循环来完成,但这需要30多个小时(粗略的想法)。有

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

5J1C6L2DP4P9A9H9Q

6d5m7w4c8h7z4s0i

3z0v5w1f3r6b2b1z

NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter

我可以通过使用16个循环来完成,但这需要30多个小时(粗略的想法)。有什么有效的方法吗。我希望python中会出现这种情况。

没有“有效”的方法来做到这一点。有
2.8242954e+19
不同的可能组合,或
28242954000000000000
。如果每个组合长度为16个字符,则将所有这些存储在原始文本文件中将占用
451887264000
GB、
441296156.25
TB、
430953.2775878906
PB或
420.8528101444
EB。普通消费者可使用的最大硬盘是16TB(三星PM1633a)。他们花了1.2万美元。这使得存储所有这些数据的总成本达到330972117600美元(比尔盖茨净资产的3677.46797倍)。即使忽略所有这些驱动器将占用的空间量,忽略连接它们所需的硬件成本,并假设它们都可以在无损RAID阵列中以最高性能运行,这也会使写入速度达到每秒330972118 GB。听起来很多,不是吗?即使有这样的写入速度,如果没有CPU功率、RAM速度或RAID控制器本身的瓶颈,文件写入也需要22分钟

资料来源-计算器

没有“有效”的方法来做到这一点。有
2.8242954e+19
不同的可能组合,或
28242954000000000000
。如果每个组合长度为16个字符,则将所有这些存储在原始文本文件中将占用
451887264000
GB、
441296156.25
TB、
430953.2775878906
PB或
420.8528101444
EB。普通消费者可使用的最大硬盘是16TB(三星PM1633a)。他们花了1.2万美元。这使得存储所有这些数据的总成本达到330972117600美元(比尔盖茨净资产的3677.46797倍)。即使忽略所有这些驱动器将占用的空间量,忽略连接它们所需的硬件成本,并假设它们都可以在无损RAID阵列中以最高性能运行,这也会使写入速度达到每秒330972118 GB。听起来很多,不是吗?即使有这样的写入速度,如果没有CPU功率、RAM速度或RAID控制器本身的瓶颈,文件写入也需要22分钟

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)
资料来源-计算器

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)
基本思想是。太慢了。但代码很短。您可以修改“全部”中的字符和序列n的长度。 如果你不清楚代码,那么试着用一些例子来模拟它

基本思想是。太慢了。但代码很短。您可以修改“全部”中的字符和序列n的长度。 如果您不清楚代码,请尝试用一些案例模拟它。

您可以使用生成所有
16
长案例:

import string, itertools
i = itertools.product(string.digits, string.ascii_lowercase, repeat=8)
j = (''.join(p) for p in i)
由于
i
元组的迭代器,我们需要将它们全部转换为
字符串
(因此它们的格式是您想要的)。这是相对简单的,因为我们可以将每个
元组
传递到
生成器
中,然后
将元素连接到一个
字符串中


我们可以看到迭代器(
j
)通过多次调用它的
next()
来工作:

>>> next(j)
'0a0a0a0a0a0a0a0a'
>>> next(j)
'0a0a0a0a0a0a0a0b'
>>> next(j)
'0a0a0a0a0a0a0a0c'
>>> next(j)
'0a0a0a0a0a0a0a0d'
>>> next(j)
'0a0a0a0a0a0a0a0e'
>>> next(j)
'0a0a0a0a0a0a0a0f'
>>> next(j)
'0a0a0a0a0a0a0a0g'
您可以使用生成所有
16
长案例:

import string, itertools
i = itertools.product(string.digits, string.ascii_lowercase, repeat=8)
j = (''.join(p) for p in i)
由于
i
元组的迭代器,我们需要将它们全部转换为
字符串
(因此它们的格式是您想要的)。这是相对简单的,因为我们可以将每个
元组
传递到
生成器
中,然后
将元素连接到一个
字符串中


我们可以看到迭代器(
j
)通过多次调用它的
next()
来工作:

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

查看
itertools
,您可以使用
product
生成所有这些。尽管…@jornsharpe事实上我是新来的,我从过去三天开始一直在尝试。我想从这里得到帮助。不,没有有效的方法生成20882706457600000000个序列。好的一面是,很难找到你需要的理由。我在给你帮助,我告诉你看看itertools.product。你不应该指望为你写出来。正如@DSM所指出的,尽管这样可以让你写得更简洁,但算法的复杂性仍然相当糟糕。@jonrsharpe我知道我必须自己做。我也在调查。感谢您的回复:)查看
itertools
,您可以使用
product
生成所有这些。尽管…@jornsharpe事实上我是新来的,我从过去三天开始一直在尝试。我想从这里得到帮助。不,没有有效的方法生成20882706457600000000个序列。好的一面是,很难找到你需要的理由。我在给你帮助,我告诉你看看itertools.product。你不应该指望为你写出来。正如@DSM所指出的,尽管这样可以让你写得更简洁,但算法的复杂性仍然相当糟糕。@jonrsharpe我知道我必须自己做。我也在调查。谢谢你的回复:)所以基本上,“你不能一次存储所有的数字”。也许是另一个建议?可能是一个生成器表达式?@tobias_k