【发布时间】:2017-07-27 14:44:43
【问题描述】:
我正在尝试使用以下方法将多个不同长度列表的子产品合并到元组列表中:
import itertools
letters = ['a', 'b', 'c']
symbols = ['*', '#', '+']
numbers = [1, 2, 3, 4, 5]
tuples_of_two = zip(letters, symbols)
tuples_of_three = list(itertools.product(tuples_of_two, numbers))
print(tuples_of_three)
产生一个包含元组和数字的元组列表:
[(('a', '*'), 1),
(('a', '*'), 2),
(('a', '*'), 3),
(('a', '*'), 4),
(('a', '*'), 5),
(('b', '#'), 1),
(('b', '#'), 2),
(('b', '#'), 3),
(('b', '#'), 4),
(('b', '#'), 5),
(('c', '+'), 1),
(('c', '+'), 2),
(('c', '+'), 3),
(('c', '+'), 4),
(('c', '+'), 5)]
但实际上我正在尝试获得以下结果,这是一个没有“子元组”的元组列表:
[('a', '*', 1),
('a', '*', 2),
('a', '*', 3),
('a', '*', 4),
('a', '*', 5),
('b', '#', 1),
('b', '#', 2),
('b', '#', 3),
('b', '#', 4),
('b', '#', 5),
('c', '+', 1),
('c', '+', 2),
('c', '+', 3),
('c', '+', 4),
('c', '+', 5)]
并不是说在元组中我只想要'a'与'*'组合,'b'与'#'和'c'与'+'所以它不是intertools.product可以达到的完整产品.
这可能可以通过使用一些“untuples”元组的第一个元素或者更优雅的直接方式来实现。
但我现在卡住了..
谁能帮忙?
提前致谢!
【问题讨论】:
-
[(letters[i], symbols[i], n) for i,n in itertools.product(range(len(letters)), numbers)] -
flatten_tuple = lambda (nested, outer_scalar): nested + (outer_scalar,),以防万一。 -
“我不相信这真的是你想要的。你真的想要 a only 与 * 结合吗?不与 # 或 + 结合?”正如解释的那样,我不希望它带有 # 或 + 。 @Stefan Pochmann:您现在是否因为我的反应时间不够快而投了反对票?
-
感谢您的所有回答!这节省了我的时间。
-
@Stefan Pochmann:请您再次投票!?我想这个问题很有价值,因为我在 SO 上没有找到任何关于此的内容。