/ / quali sono le possibili permutazioni di 8 cifre - python, permutazione

quali sono le possibili permutazioni di 8 cifre - python, permutazione

Ho bisogno di sapere quali sono le possibili permutazioni di 8 cifre seguendo le regole del mio codice Python:

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")

risposte:

2 per risposta № 1

Ce ne sono molti, per essere chiari:

  • Le combinazioni di 123 per 2 cifre sono 12, 13, 23.
  • Le permutazioni di 123 per 2 cifre sono 12, 13, 21, 23, 31, 32.

Le combinazioni sono un numero inferiore perché l'ordine non è importante. Il codice sembra richiedere almeno un numero o una lettera nella combinazione di otto cifre, quindi è necessario la somma di:

  • Combinazioni di combinazioni di 1 cifra volte di 7 lettere.
  • Combinazioni di 2 cifre per combinazioni di 6 lettere.
    eccetera...
  • Combinazioni di 7 cifre per combinazioni di 1 lettera.

Le permutazioni dovrebbero essere 62 lettere / numeri presi 8 alla volta, meno le permutazioni di tutte le lettere di 52 lettere prese 8 alla volta, meno le permutazioni di tutti i numeri di 10 numeri presi 8 alla volta.

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))

Produzione:

Combinations:        2,628,560,350
Permutations:  105,983,553,312,000

Cercare di generare tutte quelle combinazioni o permutazioni in una lista in memoria come sta facendo il tuo codice non è una buona idea.


1 per risposta № 2

Per la cronaca, non penso che tu stia ponendo la domanda giusta. Dici la permutazione, ma il tuo codice usa combinazioni, quelle sono cose diverse.

Non ti darò la risposta completa, perché ci vorrebbe un'eternità per calcolarlo. Per dirla in prospettiva, quanto è grande questo numero. La permutazione di 8 numeri da 0 a 9 è: 1.814.400

A partire da: (0, 1, 2, 3, 4, 5, 6, 7), che termina con (9, 8, 7, 6, 5, 4, 3, 2)

Puoi dimostrare quante permutazioni di 8 ci sono in tutte le lettere ASCII con i numeri da 0 a 9 usando questo:

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

Ma questo richiederà MOLTO LUNGO, solo per mostrare quanto è grande questo numero:

L'ho eseguito per un paio di minuti ed era più di 1.500.000.000. (1.5 miliardi)

Inoltre, il tuo codice non ha molto senso. Perché hai bisogno di calcolare un numero così grande? Perché hai bisogno di scriverlo in un file (probabilmente ci vorrà per sempre / esaurire la memoria e / o lo spazio). Prova a elaborare quello che vuoi.