Create List Of Factorials Using List Comprehension
Solution 1:
You can use math.factorial()
:
import math
[math.factorial(n) for n in range(10)]
Output:
>>>import math>>>>>>[math.factorial(n) for n inrange(10)]
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
Solution 2:
Just for fun:
One-liner mega-hack using list comprehension and an auxililary accumulator (the resulting list itself) to reuse previously computed value
s=[]; s=[s[-1] for x in range(1,10) if not s.append(x*s[-1] if s else1)]
result:
[1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
note: The math.factorial
answer is the way when elements are random. Here it's faster because we can reuse previous results.
There's also another drawback: the need to store all elements in a list
because python does not allow if
and assignment like C does. So we have to append to a list and negate the None
it returns so if
test is True
As I said: fun, but still a hack.
Solution 3:
Your attempt does not work because the list comprehension works element-wise, you cannot refer to lst[i-1]
like that. There is a factorial
function in math
module, however, since you mentioned generators, you can use one like this
defmygenerator():
total = 1
current = 1whileTrue:
total *= current
yield total
current += 1
factorial = mygenerator()
output = [next(factorial) for i inrange(10)]
Solution 4:
We could also use our own function but hey, the meaning of the comprehension lists is lost a bit but it is still functional
deffactorialIte(n):
factorial = 1for i inrange(1,n+1):
factorial = factorial*i
return factorial
# 10 is n_max
[factorialIte(n) for n inrange(1,11)]
>>[1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
Post a Comment for "Create List Of Factorials Using List Comprehension"