今さらPython3 (24) - zipとか

この本の第4章を読み進めてます。

入門 Python 3

入門 Python 3

気になるzip

便利だよと聞きつつ、中々使いこなせてなかったzipについて。

>>> days = ['Monday', 'Tuesday', 'Wednesday']
>>> fruits = ['banana', 'orange', 'peach']
>>> drinks = ['coffee', 'tea', 'beer']
>>> desserts = ['tiramisu', 'ice cream', 'pie', 'pudding']
>>> for day, fruit, drink, dessert in zip(days, fruits, drinks, desserts):
...     print(day, ": drink", drink, "- eat", fruit, "- enjoy", dessert)
...
Monday : drink coffee - eat banana - enjoy tiramisu
Tuesday : drink tea - eat orange - enjoy ice cream
Wednesday : drink beer - eat peach - enjoy pie
>>>

dessertsだけ4つ要素があるけど、他が3つずつなので少ない方に合わせてあるという事だね。

>>> english = 'Monday', 'Tuesday', 'Wednesday'
>>> french = 'Lundi', 'Mardi', 'Mercredi'
>>> english
('Monday', 'Tuesday', 'Wednesday')
>>> french
('Lundi', 'Mardi', 'Mercredi')
>>> list(zip(english, french))
[('Monday', 'Lundi'), ('Tuesday', 'Mardi'), ('Wednesday', 'Mercredi')]
>>> dict(zip(english, french))
{'Monday': 'Lundi', 'Tuesday': 'Mardi', 'Wednesday': 'Mercredi'}
>>>

zip()を使って、タプルのリストや辞書を作ることもできます。順番が決まっているリストが複数ある場合は便利そうですね。

rangeを使おう

>>> range (0,3)
range(0, 3)
>>> for x in range(0,3):
...    print(x)
...
0
1
2
>>> list(range(0,3))
[0, 1, 2]
>>>

前使ったときもあれ?と思ったんだけど、range(0,3)というのは、0から3という意味ではなく、「0から数えて3要素」と理解すれば良さそうと思ったら、

>>> for x in range(3, 5):
...     print(x)
...
3
4

違ったw。ゼロから初めて3つオフセット、5番目の要素まで出すという理解の方が正しいみたい。

>>> for x in range(2, -1, -1):
...    print(x)
...
2
1
0
>>> for x in range(2, -1, -2):
...    print(x)
...
2
0
>>> for x in range(2, -5, -1):
...    print(x)
...
2
1
0
-1
-2
-3
-4
>>> for x in range(-10, 10, 2):
...    print(x)
...
-10
-8
-6
-4
-2
0
2
4
6
8
>>>

Range()に3つめの引数を渡すとそれはステップになって、マイナス値を入れれば数を減らしていく事も可能。

>>> for x in range(10, -10, 2):
...   print(x)
...
>>>

怒られるかと思ったら、しれっと無視されたw

>>> list(range(0,11,2))
[0, 2, 4, 6, 8, 10]
>>>

他のを散々やり尽くした後だけど、これは本に載っていたヤツを一応やってみました。

(つづく)