itertools.combinations
,如果兩個列表都與此處相同。 或者在一般情況下itertools.product
,其次是一些過濾:
In [7]: a = ["1", "2", "3"]
...: b = ["a", "b", "c"]
In [8]: list(filter(lambda t: t[0] < t[1], product(a,b)))
Out[8]:
[('1', 'a'),
('1', 'b'),
('1', 'c'),
('2', 'a'),
('2', 'b'),
('2', 'c'),
('3', 'a'),
('3', 'b'),
('3', 'c')]
另外,我覺得術語組合已經意味着元素在結果中的順序並不重要。
好吧,Theodros是對的。對於補償,這裏應該列出的任何清單開展工作的一個版本:
l = [['1','2','3'], ['a','b'], ['x','y']]
set(tuple(sorted(p)) for p in product(*l) if len(set(p)) > 1)
給(適當排序)
set([('1', 'a', 'x'),
('3', 'a', 'y'),
('2', 'b', 'y'),
('2', 'a', 'y'),
('1', 'a', 'y'),
('1', 'b', 'y'),
('2', 'a', 'x'),
('3', 'b', 'y'),
('1', 'b', 'x'),
('2', 'b', 'x'),
('3', 'a', 'x'),
('3', 'b', 'x')])
而且它也適用於以前的反l = [[1,2,3], [1,3,4,5]]
:
set([(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 5), (3, 4), (2, 4), (3, 5)])
如果你有'a = [1,2,3]; b = [4,5,6]',是否是(5,6)'輸出或不輸出?你可以從同一個列表中抽兩次嗎? (上面的代碼表示否) – DSM