Rus*_*hal 11 python list-comprehension list
我正在研究Project Euler#35,我需要找到一个数字的循环排列.使用itertools
,我可以很容易地得到一个数字的排列.但是,我想用列表理解来做(因为它似乎更像Pythonic;我也试图熟悉列表理解).
我发现所有圆形素数只能包含数字1,3,7和9(这不包括2和5,根据定义它们是圆形素数).如果任何其他数字在数字(0,2,4,5,6或8)中,则其中一个排列将不是素数(因为该数字在至少一个排列中将是最后一个).
因此,我尝试这样做:
from itertools import permutations
l = [x for x in list(permutations('1397', y)) for y in range(7)]
Run Code Online (Sandbox Code Playgroud)
我需要使用,y for y in range(7)
以便我获得不同长度的排列.
但是,这给了我一个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
Run Code Online (Sandbox Code Playgroud)
这有效,但它没有在一个列表理解中使用两个变量:
l = []
for y in range(7):
l.append([x for x in list(permutations('1379', y))])
Run Code Online (Sandbox Code Playgroud)
如何进行双变量列表理解?谢谢!
Ash*_*ary 14
该for y in range(7)
部分应该在排列循环之前出现:
l = [x for y in range(7) for x in list(permutations('1397', y))]
Run Code Online (Sandbox Code Playgroud)
上面的列表理解相当于:
In [93]: l = []
In [94]: for y in range(7):
...: l.extend(list(permutations('1397', y)))
Run Code Online (Sandbox Code Playgroud)
例如:
In [76]: l = [x for y in range(3) for x in list(permutations('1397', y))]
In [77]: l
Out[77]:
[(),
('1',),
('3',),
('9',),
('7',),
('1', '3'),
('1', '9'),
('1', '7'),
('3', '1'),
('3', '9'),
('3', '7'),
('9', '1'),
('9', '3'),
('9', '7'),
('7', '1'),
('7', '3'),
('7', '9')]
Run Code Online (Sandbox Code Playgroud)
和list-comprehension
你的工作示例的版本,
l = []
for y in range(7):
l.append(list(permutations('1397', y)))
Run Code Online (Sandbox Code Playgroud)
是:
In [85]: l = [list(permutations('1397', y)) for y in range(3)]
In [86]: l
Out[86]:
[[()],
[('1',), ('3',), ('9',), ('7',)],
[('1', '3'),
('1', '9'),
('1', '7'),
('3', '1'),
('3', '9'),
('3', '7'),
('9', '1'),
('9', '3'),
('9', '7'),
('7', '1'),
('7', '3'),
('7', '9')]]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18798 次 |
最近记录: |