今さらPython3 (24) - zipとか
この本の第4章を読み進めてます。
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
気になる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] >>>
他のを散々やり尽くした後だけど、これは本に載っていたヤツを一応やってみました。
(つづく)