Python入門 - シーケンス セット マッピング (2)
では、シーケンス、セット、マッピングの基本的な使い方を見ていきましょう
string (文字列)
文字列については、以前も説明をしました。ここでは、前回は説明をしなかった部分を説明したいと思います。文字列はシーケンスですので、文字列の要素である「文字」を取り出したりできます。
>>> str = 'Hello, Python!'
>>> print(str[0])
H
>>> print(str[1])
e
>>> print(str[0:5])
Hello
>>> print(str[-7:-1])
Python
>>> print(str.find('P'))
7
>>> print(str.replace('Hello', 'Hi'))
Hi, Python!
>>> print(str)
Hello, Python!
それでは、それぞれの処理を見ていきましょう。
- [n] n番目の文字(要素)を取得する nは「0」から数える
- [from: to] from番目からto番目までの部分文字列(要素)を取得する。マイナスにすると反対側から数える
- find(x) 文字xが、何番目か調べる
- replace(from, to) fromをtoに置換する
この中で、[n]とか[from: to]はリストなど、他のものでも共通です。中でも、[from: to]は一部の要素を切り取るという意味でスライスと呼ばれます。
このスライスの番号と要素の位置関係は、少しわかりづらいので図解してみようと思います。
[ 0 ] H [ 1 ] e [ 2 ] l [ 3 ] l [ 4 ] o [ 5 ]
このように、文字(要素)と文字(要素)の間に数字があるイメージです。
また、replaceの処理を見ると、置換済みの文字列は、もともとの文字列strとは別オブジェクトとして生成され、strには変更がないことがわかります。つまり、イミュータブルだ、ということです。
スライスは、省略した記法もあります。
>>> print(str[7: ])
Python!
>>> print(str[ : 5])
Hello
tuple (タプル)
それでは、タプルの使い方を見てきます。タプルは「( )」で囲い、要素を「, 」で区切って並べます。
>>> tuple = (1, 'Python', 4.4)
>>> print(tuple)
(1, 'Python', 4.4)
>>> print(tuple[0])
1
>>> print(tuple[1])
Python
>>> print(tuple[2])
4.4
>>> print(tupel[0: 2])
Traceback (most recent call last):
File "<pyshell#231>", line 1, in <module>
print(tupel[0: 2])
NameError: name 'tupel' is not defined
>>> print(tuple[0: 2])
(1, 'Python')
>>> tuple[0] = 2
Traceback (most recent call last):
File "<pyshell#233>", line 1, in <module>
tuple[0] = 2
TypeError: 'tuple' object does not support item assignment
>>> print(len(tuple))
3
要素の取り出し方や、スライスの使い方は共通です。タプルもイミュータブルなので、代入で要素を変更しようとすると、「TypeError: 'tuple' object does not support item assignment」と怒られてしまいます。
また、lenで要素数を取得できます。これは、文字列やリストなども一緒です。
>>> print(len(str))
14
list (リスト)
リストはミュータブルなので、要素の追加や削除、変更したりもできます。
リストは「[ ]」で囲います。タプルと似ているので気をつけましょう。
>>> print(len(tuple))
3
>>> print(len(str))
14
>>> list = [10, 'object', 3.33, 'data']
>>> print(list)
[10, 'object', 3.33, 'data']
>>> print(list[2])
3.33
>>> print(list[1: ])
['object', 3.33, 'data']
>>> list.append('new')
>>> print(list)
[10, 'object', 3.33, 'data', 'new']
>>> list.remove('data')
>>> print(list)
[10, 'object', 3.33, 'new']
>>> list[3] = 'old'
>>> print(list)
[10, 'object', 3.33, 'old']
>>> list.insert(2, 11.11)
>>> print(list)
[10, 'object', 11.11, 3.33, 'old']
>>> print(len(list))
5
>>> print(list.index('object'))
1
リストはミュータブルなので、代入することで、オブジェクトを変更できます。
また、新しいものがいくつが出てきたので、説明したいと思います。
- append(value) valueをリストの最後に追加する
- remove(value) valueをリストから削除する
- insert(index, value) indexの位置にvalueを挿入する
- index(value) valueが最初に出てくるのが何番目か調べる
bytes bytearray
bytesはbytes()で生成します。
>>> tuple = (10, 11, 30)
>>> b = bytes(tuple)
>>> print(b)
b'\n\x0b\x1e'
>>> b = bytes('hello', 'utf-8')
>>> print(b)
b'hello'
>>> print(hash(b))
1062589546754634676
サンプルコードのように、「整数だけのシーケンス」や「エンコードを指定した文字列」などから、bytesを生成できます。「b' '」で囲むと、それはバイト列であることを表します。
また、hash()を利用することでハッシュ値を得ることができます。
>>> ba = bytearray(tuple)
>>> print(tuple)
(10, 11, 30)
>>> print(ba)
bytearray(b'\n\x0b\x1e')
>>> ba.append(100)
>>> print(ba)
bytearray(b'\n\x0b\x1ed')
bytearrayはbytearray()で生成します。こちらはミュータブルなので、appendやremoveで要素の追加や削除ができます。
set frozenset (セットとフローズンセット)
次は、集合を見ていきたいと思います。setとfrozensetは「set([ ])」「frozenset([ ])」
で生成します。
>>> s = set([10, 20, 30, 'list'])
>>> print(s)
{'list', 10, 20, 30}
>>> s = set([10, 10, 20, 30, 'list'])
>>> print(s)
{'list', 10, 20, 30}
>>> print(s[0])
Traceback (most recent call last):
File "<pyshell#60>", line 1, in <module>
print(s[0])
TypeError: 'set' object does not support indexing
>>> s.add(100)
>>> print(s)
{'list', 100, 10, 20, 30}
>>> s.remove('list')
>>> print(s)
{100, 10, 20, 30}
>>> fs = frozenset([1, 2, 3])
>>> print(fs)
frozenset({1, 2, 3})
セットは重複を認めないので、同じ値が複数あっても、1つだけになります。
また、順序がなく、シーケンスと違い、生成時の要素の順番は関係ありません。順番がないので、[n]で要素にアクセスできません。n番目の要素が何かわからないからです。
また、要素の追加や削除もできます。
- add(value) valueを追加する
- remove(value) valueを削除する
dictionary (辞書)
辞書は、{キー:値, キー:値}という書き方で、生成します。
>>> dictionary = {'apple': 'red', 'banana': 'yellow', 'mikan': 'yellow'}
>>> print(dictionary)
{'apple': 'red', 'banana': 'yellow', 'mikan': 'yellow'}
>>> print(dictionary['banana'])
yellow
>>> print(dictionary['mikan'])
yellow
>>> print(len(dictionary))
3
>>> dictionary.update('tomato': 'red')
SyntaxError: invalid syntax
>>> dictionary.update({'tomato': 'red'})
>>> print(dictionary)
{'apple': 'red', 'banana': 'yellow', 'mikan': 'yellow', 'tomato': 'red'}
>>> del dictionary['apple']
キーを指摘することで、値を取得できるのがわかると思います。また、要素の追加削除は下記の通りにします。
- updete() 要素を追加する
- del XXX[キー] 要素を削除する