ホームページ  >  記事  >  バックエンド開発  >  Pythonのset(セット)型演算のまとめ

Pythonのset(セット)型演算のまとめ

高洛峰
高洛峰オリジナル
2016-10-20 10:15:331501ブラウズ

Python のセットは他の言語と同様で、順序のない繰り返し要素のセットであり、セット オブジェクトの関係テストや重複要素の削除もサポートされています。他の数学演算

sets は、set 内の x、len(set)、および set 内の x をサポートします。順序なしのコレクションであるため、セットは要素の位置や挿入ポイントを記録しません。したがって、セットはインデックス付け、スライス、その他のシーケンスのような操作をサポートしません。

以下に簡単な例を挙げてみましょう。

>>> x = set('スパム')

>>> y = set(['h','a','m'])

>>> x, y

(set([ 'a', 'p', 's', 'm']), set(['a', 'h', 'm']))

ここでは小さなアプリケーションをいくつか紹介します。

>>> x & y # 交差点

set(['a', 'm'])

>>> x y # Union

set(['a', 'p', 's ' , 'h', 'm'])

>>> x - y # Difference set

set(['p', 's'])

あるネチズンが、大規模な集合から重複した要素を削除する方法を尋ねたのを覚えています。 list を解決するには hash を使用しても問題ありませんが、パフォーマンスはあまり高くありません。set を使用して解決するのは依然として非常に良いです。

>>> a = [11,22] ,33,44,11,22]

>>> b = set(a)

>>> b

set([33, 11, 44, 22])

>>> c = [i for i in b]

>>> c

[33, 11, 44, 22]

これは非常にクールで、わずか数行で実行できます。

1.8 セット

コレクションは、順序付けされていないオブジェクトのグループを含めるために使用されます。セットを作成するには、set() 関数を使用し、次のような一連の項目を指定します:

s = set([3,5,9,10]) #数値セットを作成する

t = set("Hello" ) #一意の文字のコレクションを作成する

リストやタプルとは異なり、コレクションには順序付けがなく、数値的にインデックスを付けることはできません。さらに、コレクション内の要素を繰り返すことはできません。たとえば、前のコードで t セットの値をチェックすると、結果は次のようになります:

>>> t

set(['H', 'e', 'l', 'o' ])

「l」のみであることに注意してください。

セットは、和集合、積集合、差分、対称差分を含む一連の標準演算をサポートします。例:

a = t s # t と s の和集合

b = t & s | # t と s の和集合 交差点

c = t – s # 差分集合を見つけます (項は t 内にありますが、s 内にはありません)

d = t ^ s # 対称差分集合 (項は t 内にあり、またはs、ただし両方同時には不可) 中)


基本操作:

t.add('x') ) 1 つの項目を削除できます:

t.remove('H')

len (s)

長さを設定

x in s

xがsのメンバーであるかどうかをテスト

xではない s

test xがsのメンバーではないかどうかをテスト

s.issubset(t)

s

s のすべての要素が t にあるかどうかをテストします

s.issuperset(t)

s >= t

t のすべての要素が s にあるかどうかをテストします

s.union(t)

s | t

s と t のすべての要素を含む新しいセットを返します

s.intersection(t)

s & t

s と t の共通要素を含む新しいセットを返します

s.difference(t)

s - t

s にはあるが t

には無い要素を含む新しいセットを返します

s.metric_difference(t)

s ^ t

s と t

s の一意の要素を含む新しいセットを返します。 copy()

セット「s」の浅いコピーを返します

注意してください:union()、intersection()、 Difference() と Symmetric_difference() は引数として任意の反復可能オブジェクトを受け入れます。対照的に、演算子ベースの対応物では、引数を設定する必要があります。これにより、読みやすくするために set('abc').intersection('cbs') の代わりに set('abc') & 'cbs' を使用するなどの潜在的なエラーが回避されます。バージョン 2.3.1 からの変更点: 以前は、すべてのパラメータを設定する必要がありました。

さらに、Set と ImmutableSet は両方ともセット間の比較をサポートしています。 2 つのセットが等しいのは、この場合に限り、各セットの要素がもう一方のセットの要素である (これらは互いのサブセットである) ということです。最初のセットが 2 番目のセットのサブセット (サブセットではあるが等しくない) である場合にのみ、1 つのセットが別のセットより小さくなります。最初のセットが 2 番目のセットのスーパーセット (スーパーセットではあるが等しくない) である場合にのみ、あるセットが別のセットよりも強力になります。

サブセットと等価比較では、完全な並べ替え機能が生成されません。たとえば、2 つのセットは互いに等しくなく、互いのサブセットでもないため、次の操作は False を返します: a

b。したがって、sets は __cmp__ メソッドを提供しません。

セットはソート関数の一部 (サブセット関係) のみを定義するため、 list.sort() メソッドの出力はセットのリストに対しては定義されません。

Operator

演算結果

hash(s)

s

のハッシュ値を返す

次の表は、Set では利用可能だが ImmutableSet では利用できない操作を示しています:

演算子 (voperator)

演算結果

s.update(t)

s |= t

を返します set "セット「t」に要素を追加した後、s"

s.intersection_update(t)

s &= t

。セット「t」の要素を含むセット「s」

s のみを返します。difference_update(t)

s -= t

集合 "t" に含まれる要素を削除した後に集合 "s" を返します

s.metric_difference_update(t)

s ^= t

集合 "t" を返すか、集合 "t" を返しますセット "s" 内の要素 (両方ではない)

s.add(x)

要素 x をセット "s" に追加します

s.remove(x)

要素を削除します セット "s" 内の未指定の要素を返します。または、空の場合は KeyError を発生させます

s.clear()

セット "s" 内のすべての要素を削除します

注意: update()、intersection_update()、difference_update()、および symmetric_difference_update() の非演算子バージョンは、引数として反復可能。バージョン 2.3.1 からの変更点: 以前は、すべてのパラメータを設定する必要がありました。

また、注意してください: このモジュールには、update() メソッドのエイリアスである Union_update() メソッドも含まれています。このメソッドは、下位互換性のために組み込まれています。このメソッドは組み込みの set() およびフローズンセット() タイプでもサポートされているため、プログラマは update() メソッドをより頻繁に使用する必要があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。