0

次のリストがあるとします。

 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')]

何か案は?

4

3 に答える 3

2
>>> 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]

于 2012-08-14T19:08:13.860 に答える
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']]
于 2012-08-14T19:07:01.697 に答える
0

これを試して:

[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')], []]
于 2012-08-14T19:15:14.020 に答える