前面的文章提供了涉及嵌套理解的简明解决方案,但是缺少了一些可能的子列表集的产品,比如('a', 'x')。我将尝试以更易读的方式对其进行分解:lst = [['a', 'b', 'c'], [1, 2, 3], ['x', 'y']]
result = [] # collect your products
# n sublists: iterate over all 'sub_lengthes'
for length in xrange(1, len(lst)+1):
# iterate over all possible combinations of sublists
for c in itertools.combinations(lst, length):
# iterate over all products for each combination
for res in itertools.product(*c):
result.append(res)
print(result)
>>> result
# 3 + 3 + 2 = 8 singletons
[('a',), ('b',), ('c',), (1,), (2,), (3,), ('x',), ('y',),
# 3*3 + 3*2 + 3*2 = 21 pairs
('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1), ('c', 2), ('c', 3),
('a', 'x'), ('a', 'y'), ('b', 'x'), ('b', 'y'), ('c', 'x'), ('c', 'y'),
(1, 'x'), (1, 'y'), (2, 'x'), (2, 'y'), (3, 'x'), (3, 'y'),
# 3*3*2 = 18 triplets
('a', 1, 'x'), ('a', 1, 'y'), ('a', 2, 'x'), ('a', 2, 'y'), ('a', 3, 'x'), ('a', 3, 'y'), ('b', 1, 'x'), ('b', 1, 'y'), ('b', 2, 'x'), ('b', 2, 'y'), ('b', 3, 'x'), ('b', 3, 'y'), ('c', 1, 'x'), ('c', 1, 'y'), ('c', 2, 'x'), ('c', 2, 'y'), ('c', 3, 'x'), ('c', 3, 'y')]