I am working on Project Euler #35, and I need to find the circular permutations of a number. Using itertools, I can easily get the permutations of a number. However, I want to do it with a list comprehension (as it seems more Pythonic; I am also trying to get familiar with list comprehensions).
I found that all circular primes can only contain the digits 1, 3, 7, and 9 (this excludes 2 and 5, which are circular primes by definition). If any other digit was in the number (0, 2, 4, 5, 6, or 8) one of the permutations would not be a prime (as that digit would be last in at least one of the permutations).
Thus, I tried doing this:
from itertools import permutations
l = [x for x in list(permutations('1397', y)) for y in range(7)]
I needed to use y for y in range(7) so that I get varying lengths of permutations.
However, this gave me a TypeError:
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
l = [x for x in list(permutations('1397', y)) for y in range(7)]
TypeError: an integer is required
This works, but it isn’t using two variables in one list comprehension:
l = []
for y in range(7):
l.append([x for x in list(permutations('1379', y))])
How can I do a double-variable list comprehension? Thanks!
The
for y in range(7)part should come before the permutation loop.:The above list comprehension is equivalent to :
For example:
And the
list-comprehensionversion for your working example,is: