说我有一个列表清单:beers
。
speights = [1, 10]
tui = [2, 7]
export = [3, 9]
beers = [speights, tui, export]
所以我只能找到如何获得列表列表的所有可能组合:(itertools.product(*beers))
但这给了我每一个组合,包括每个啤酒的评级和指数。
为了使这一点更清楚,因为我正在努力解释这个概念:
[[speights], [speights, tui], [speights, export], [speights, tui, export],
[tui], [tui, speights], [tui, export], [tui, speights, export]
..... etc.]
这是所需的输出,它必须处理任意长度的列表列表。
任何帮助都会受到高度赞赏和对不起,如果以前被问过,因为我似乎无法找到这个具体问题。
答案 0 :(得分:1)
您正在寻找任何长度的permutations
。试试这个:
import itertools
...
c = []
for i in range(len(beers)):
c.extend(itertools.permutations(beers, i + 1))
print(c)
将产生
[([1, 10],), ([2, 7],), ([3, 9],), ([1, 10], [2, 7]), ([1, 10], [3, 9]),
([2, 7], [1, 10]), ([2, 7], [3, 9]), ([3, 9], [1, 10]), ([3, 9], [2, 7]),
([1, 10], [2, 7], [3, 9]), ([1, 10], [3, 9], [2, 7]), ([2, 7], [1, 10], [3, 9]),
([2, 7], [3, 9], [1, 10]), ([3, 9], [1, 10], [2, 7]), ([3, 9], [2, 7], [1, 10])]
答案 1 :(得分:1)
您可以将permutations
与chain.from_iterable
结合使用:
>>> from itertools import permutations, chain
>>> beers = ['speights', 'tui', 'export']
>>> list(chain.from_iterable(permutations(beers, i) for i in xrange(1, len(beers) + 1)))
[('speights',), ('tui',), ('export',), ('speights', 'tui'), ('speights', 'export'), ('tui', 'speights'), ('tui', 'export'), ('export', 'speights'), ('export', 'tui'), ('speights', 'tui', 'export'), ('speights', 'export', 'tui'), ('tui', 'speights', 'export'), ('tui', 'export', 'speights'), ('export', 'speights', 'tui'), ('export', 'tui', 'speights')]