Python 生成所有可能的altrenate数字和字母序列
我想生成所有可能的替代数字和数字序列。比如说 5J1C6L2DP4P9A9H9Q 6d5m7w4c8h7z4s0i 3z0v5w1f3r6b2b1z NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter 我可以通过使用16个循环来完成,但这需要30多个小时(粗略的想法)。有什么有效的方法吗。我希望python中会出现这种情况。没有“有效”的方法来做到这一点。有Python 生成所有可能的altrenate数字和字母序列,python,algorithm,numpy,combinations,permutation,Python,Algorithm,Numpy,Combinations,Permutation,我想生成所有可能的替代数字和数字序列。比如说 5J1C6L2DP4P9A9H9Q 6d5m7w4c8h7z4s0i 3z0v5w1f3r6b2b1z NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter NumberSmallletterNumberSmallletter 我可以通过使用16个循环来完成,但这需要30多个小时(粗略的想法)。有
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