見出し画像

Pythonをはじめよう!-12 データ構造としてのリスト型-3 (del,タプルとシーケンス,集合型)

del 文

リストから要素を削除する方法としては

clear, pop, remove, del

がありますが"del"はインデックスを指定して削除します。これは pop() メソッドと違い、値を返しません。

 del 文はリストからスライスを除去したり、リスト全体を削除することもできます。

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]  // インデックス0番目を削除します。
>>> a
[1, 66.25, 333, 333, 1234.5]

>>> del a[2:4]  //インデックス23を削除します。
>>> a
[1, 66.25, 1234.5]

>>> del a[:]  // 全てを削除します。
>>> a
[]

del は変数全体の削除にも使えます:

>>> del a

この文の後で "a" を参照すると、(別の値を "a" に代入するまで) エラーになります。

タプルとシーケンス

リストや文字列には、インデックスやスライスを使った演算のように、数多くの共通の性質があります。

同じシーケンス型としてタプル (tuple) 型を見ていきます。

タプルはコンマで区切られたいくつかの値からなります。例えば以下のようになります。

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')

>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])

カッコはタプルを書くときは必ずしも必要ではないが、ネストした場合はわかりやすさからつけます。タプルはリストと似ていますが、使う目的は違い、性質としては、以下があります。

・タプルの要素を代入することはでないが、リストのような変更可能型を含めることはできる。
・タプルは 不変 で、複数の型の要素からなることもあり、要素はアンパック操作やインデックスでアクセスすることができる。(リストは 可変 で、要素はたいてい同じ型のオブジェクトであり、たいてい繰り返しの操作を行う)

注意点はタプルの値がない場合、1つしかない場合です。ない場合は

empty = ()

1つしかない場合

singleton = 'hello',

のような表記とします。

>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)

タプルのパックとは、値を入れていく操作。 以下、12345, 54321, 'hello!' が一つのタプルにパックされます。

t = 12345, 54321, 'hello!'

そして、アンパック

x, y, z = t


集合型

Python には、 集合 (set) を扱うためのデータ型もあります。集合とは、重複する要素をもたない、順序づけられていない要素の集まりです。 Set オブジェクトは、和 (union)、積 (intersection)、差 (difference)、対称差 (symmetric difference)といった数学的な演算もサポートしています。

空集合を作成するためには set() を使い、 set{}では空の辞書を作成します。

以下、簡単な使い方

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
basket

実行すると、

{'apple', 'banana', 'orange', 'pear'}

重複が除かれます。

その集合に含まれているかどうか

'orange' in basket 

だと、"True"

'crabgrass' in basket

だと、False

2つの集合体を使って

a = set('abracadabra')
b = set('alacazam')

差集合 

a-b

{'r', 'd', 'b'}

和集合 

a | b  

 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

積集合 

a & b

{'a', 'c'}

対称差集合 

a ^ b ​

 {'r', 'd', 'b', 'm', 'z', 'l'}


リストの内包表記 と同様に、 set の内包表記もサポートされています:

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

この記事が気に入ったらサポートをしてみませんか?