Ottimizzazione di una funzione fattoriale in Python

Sep 26 2020

Quindi ho ottenuto questa funzione con il parametro di decompressione (* x) , ma voglio che visualizzi il risultato senza restituirlo, e voglio una buona ottimizzazione, il che significa che ho ancora bisogno che sia una funzione di due righe

1.def fac(*x):
    2.return (fac(list(x)[0], list(x)[1] - 1)*list(x)[1]) if list(x)[1] > 0 else 1//here i need the one line to print the factorial

Ho provato a raggiungere questo obiettivo implementando lambda ma non sapevo come passare il parametro * x

Risposte

4 JackAshton Sep 27 2020 at 01:59

Il tuo lambda fattoriale è corretto. Immagino che tu voglia calcolare i fattoriali per una lista, diciamo [1, 2, 3] e produrre i risultati, è così che puoi ottenere questo risultato.

fact = lambda x: x*fact(x-1) if x > 0 else 1
print(*[fact(i) for i in [1, 2, 3]])

Che produrrà: 1, 2, 6

Un'altra opzione, se si dispone di python 3.8, è quella di utilizzare una lista di comprensione con il nuovo operatore tricheco (: =), questo è un po 'più complicato ma calcolerà e produrrà tutti i fattoriali fino an inclusivo mentre si adatta comunque alle due righe richieste.

fac, n = 1, 5
print(*[fac for i in range(1, n+1) if (fac := fac*i)])

Che produrrà: 1, 2, 6, 24, 120