从组合中,获取成员包含相同第一个元素 python 的子集



假设我有以下列表:

 ls = ['a', 'b', 'c', 'd']

我得到一个组合使用

 list(itertools.combinations(iterable, 2))  
 >>> [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

我想做的是将这个组合分解为子集,这样子集中每个元组的第一个成员是相同的:

 subset1: [('a', 'b'), ('a', 'c'), ('a', 'd')]
 subset2: [('b', 'c'), ('b', 'd'), 
 subset3: [('c', 'd')]

有什么想法吗?

>>> import itertools as it
>>> ls = ['a', 'b', 'c', 'd']
>>> ii=it.groupby( it.combinations(ls, 2), lambda x: x[0] )
>>> for key, iterator in ii:
...     print key, list(iterator)
... 
a [('a', 'b'), ('a', 'c'), ('a', 'd')]
b [('b', 'c'), ('b', 'd')]
c [('c', 'd')]

如果你不喜欢lambda,你可以使用operator.itemgetter(0)而不是lambda x: x[0]

subset = [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
subsets = [[x for x in subset where x[0] == y] for y in ['a','b','c']]

试试这个:

[filter(lambda k:k[0]==p,comb) for p in ls]

哪里:

ls = ['a', 'b', 'c', 'd']
comb = [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

输出为:

[[('a', 'b'), ('a', 'c'), ('a', 'd')], [('b', 'c'), ('b', 'd')], [('c', 'd')], []]

最新更新