0

数字のリストから、それぞれ2つの要素の一意の順序付けられていないセットを作成する必要があります。次に、各セットをリストに挿入します。

例えば:

  1. setslist = [(2,1)]
  2. uniquenumbers = [1,2,3]
  3. 一意のセット-(1,2)、(2,3)、(1,3)
  4. setslistまだ存在しない場合は、各セットを挿入します。(セットは順序付けられていません。したがって、(1,2)は(2,1)と同じです)
  5. 最後のsetslist = [(2,1),(2,3),(1,3)]

Pythonで最も最適化されたソリューションは何ですか?

4

4 に答える 4

5
>>> from itertools import combinations
>>> lis=[1,2,3,4,5]
>>> [x for x in combinations(lis,2)]
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
于 2012-07-01T19:43:27.490 に答える
2
import itertools
existing_sets = set(frozenset(x) for x in setslist)
new_sets = set(frozenset(x) for x in itertools.combinations(uniquenumbers, 2))
setslist = list(existing_sets | new_sets)
于 2012-07-01T19:42:13.440 に答える
1

代わりにsを使用frozensetし、それらをに追加しますset

于 2012-07-01T19:39:40.500 に答える
1

Ignacioのアドバイスを拡張するにはfrozenset

In [1]: from itertools import combinations

In [2]: sets = set([frozenset([1, 2])])

In [3]: uniquenumbers = [1,2,3]

In [4]: sets.update(map(frozenset, combinations(uniquenumbers, 2)))

In [5]: sets
Out[5]: set([frozenset([1, 3]), frozenset([1, 2]), frozenset([2, 3])])
于 2012-07-01T21:12:52.100 に答える