2

これは私のコードです。

s = set()
for x in [ {1,2}, {3,4}, {5,1} ]:
    s |= x

返しますset([1, 2, 3, 4, 5])

そのような場合に集合内包表記を使用することは可能ですか? どうしたら短く書けるでしょうか?

4

2 に答える 2

9

set.union

set.union(*[{1,2}, {3,4}, {5,1}])
# {1, 2, 3, 4, 5}

なぜループが必要なのですか?を使用するset.unionと、一度に 3 つ以上のセット (コンテナー) の結合を計算できます。2 番目 (およびそれ以降) の引数を設定する必要がないため、「コンテナー」と言います。

set.union(*[{1,2}, [3,4], [5,1]])
# {1, 2, 3, 4, 5}

ただし、最初にする必要があります。あるいは、

set().union(*[[1,2], [3,4], [5,1]])
# {1, 2, 3, 4, 5}

セット オブジェクト (クラスではなく)を呼び出す場合union、どの引数もセットである必要はありません。


functools.reduce

from functools import reduce

reduce(set.union, [{1,2}, {3,4}, {5,1}])
# {1, 2, 3, 4, 5}

これにより、ペアごとの削減が実行され、結果が累積されます。ただし、最初のオプションほど良くはありません。

于 2018-04-13T19:33:40.113 に答える
3

ここで集合理解が本当に必要な場合:

lst = [{1,2}, {3,4}, {5,1}]
{elem for set_ in lst for elem in set_}
于 2018-04-13T19:38:22.570 に答える