8位数字的可能排列是什么

2024-05-20 19:35:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要知道,按照python代码的规则,8位数字的可能排列是什么:

import itertools
import time
import string

numbers = set(range(10))
letters = set(string.ascii_letters)
mylist=[]
start=time.time()

comb = ([x for x in itertools.combinations([0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'], 8)
       if set(x) & letters and set(x) & numbers])

f=open("data.txt","w")
f.write("%s" % comb)
f.close()

end=time.time()
diff=end-start

print ("Se obtuvieron {} combinaciones.".format(len(comb)))
print ("En un tiempo total de:",diff,"segundos")

Tags: 代码importstringtime规则diff数字start
2条回答

他们有很多。要说清楚:

  • 两位数的123的组合是12、13、23。在
  • 2位数字的123位排列是12、13、21、23、31、32。在

组合是一个较小的数字,因为顺序无关紧要。您的代码看起来至少需要一个8位数字组合中的一个数字或字母,因此您需要以下总和:

  • 1位数乘以7个字母的组合。在
  • 2位数的组合乘以6个字母的组合。
    等。。。在
  • 7位数的组合乘以1个字母的组合。在

排列应为62个字母/数字,每次取8,减去52个字母的全字母排列,每次取8,再减去10个数字的全部数字排列,每次取8。在

from math import factorial as f

def P(n,k):
    return f(n)//f(n-k)

def C(n,k):
    return f(n)//f(n-k)//f(k)

letters = 52
numbers = 10
length = 8
combinations = sum(C(numbers,i) * C(letters,length-i) for i in range(1,length))
print('Combinations: {:20,}'.format(combinations))

permutations = P(letters+numbers,length) - P(letters,length) - P(numbers,length)
print('Permutations: {:20,}'.format(permutations))

输出:

^{pr2}$

尝试像代码那样在内存列表中生成所有这些组合或排列不是一个好主意。在

老实说,我认为你问的问题不对。你说的是排列,但是你的代码使用组合,那是不同的东西。在

我不会给你一个完整的答案,因为要计算它要花很多时间。从长远来看这个数字有多大。0~9的8个数的排列是:1.814.400

起始于:(0,1,2,3,4,5,6,7),结束于(9,8,7,6,5,4,3,2)

您可以使用以下命令演示0~9之间的所有ASCII字母中有多少个8的排列:

mylist = range(10)
mylist.extend(ascii_letters)
i = 0
for n in permutations(mylist,8):
    i += 1

但这需要很长时间,只是为了证明这个数字有多大:

我运行了几分钟,结果超过了1500万

而且,你的代码没有什么意义。你为什么要计算这么大的数字?为什么你需要把它写到一个文件中(这可能会花费永远/耗尽内存和/或空间)。试着详细说明你想要什么。在

相关问题 更多 >