読者です 読者をやめる 読者になる 読者になる

Python Works

Pythonで色々プログラミングする

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[キー]  要素を削除する