import itertools
list_with_tuples=[(1,), (2,), (3,)]
pairs = itertools.combinations(list_with_tuples, 2)
for pair in pairs:
print(pair)
所以对的结果是:
((1,),(2,)) ,
((1,),(3)) ,
((2,),(3,))
我如何结合他们? 工会结束后,我想做一本字典:
di={ (1,2): value1, (1,3): value2, (2,3): value3 }
我该怎么做?
答案 0 :(得分:10)
在python中“联合”元组的一种方法是简单地添加它们:
>>> (1,) + (2,)
(1, 2)
所以你可以修改你的例子来添加:
import itertools
list_with_tuples=[(1,), (2,), (3,)]
pairs = itertools.combinations(list_with_tuples, 2)
for left, right in pairs:
print(left + right)
输出:
(1, 2)
(1, 3)
(2, 3)
如果您需要添加n
个元组,而不仅仅是其中的2个元组,则可以使用sum
并指定空元组()
的初始值作为第二个参数。
或者,正如Kevin在评论中提到的,您可以通过使用itertools.chain
的输出来构建新元组,如果n
很大,这可能会更有效。
答案 1 :(得分:0)
您可以使用dict
理解为您执行此操作。迭代itertools.combinations
,将tuple
中的值编入索引,然后创建新的tuple
作为键,并将其添加为值。
>>> {(i[0],j[0]) : i[0] + j[0] for i,j in itertools.combinations(list_with_tuples, 2)}
{(1, 2): 3, (1, 3): 4, (2, 3): 5}
答案 2 :(得分:0)
您可以将元素链接到一个元组:
from itertools import chain,combinations
list_with_tuples=[(1,), (2,), (3,)]
di = {tuple(chain.from_iterable(comb)):"value" for comb in combinations(list_with_tuples, 2)}
print(di)
{(1, 2): 'value', (1, 3): 'value', (2, 3): 'value'}
它适用于任何长度组合。
如果您有另一个容器,其中包含您可以压缩的值:
from itertools import chain,combinations
list_with_tuples=[(1,), (2,), (3,)]
values = [1,2,3]
di = {tuple(chain.from_iterable(comb)): val for comb,val in zip(combinations(list_with_tuples, 2),values)}
print(di)
{(1, 2): 1, (1, 3): 2, (2, 3): 3}
答案 3 :(得分:0)
您可以使用itertools.chain()
:
list_with_tuples=[(1,), (2,), (3,)]
pairs = itertools.combinations(list_with_tuples, 2)
for pair in pairs:
print(tuple(itertools.chain(*pair)))
这也有一个懒惰的优点,所以你可以一次遍历链一个元素,而不是从中完成一个完整的元组,如果这是你需要的。如果pair
也是一个惰性迭代器,您可能希望使用itertools.chain.from_iterable()
而不是星号运算符。