Python3 自習・復習vol.011
最近は、夕飯の片付け後の時間に投稿することが多かったので、今日は洗濯機が止まるまでの間にしていた掃除の代わりに、Python学習をしてみようと思います。さて、どこまで進めるでしょうか・・・
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
>>>
zip() は、最もサイズの小さいシーケンスの要素を処理しつくした時に止まる。EX: desserts だけが他のリストより長いため、他のリストを長くしない限りpudding をもらえる人はいない。
dict は、タプル、リスト、文字列などの2要素のシーケンスから辞書を作れる。zip() を使えば、複数のシーケンスをっ取って、オフセットが共通する要素からタプルを作ることができる。
同じ意味の英・仏単語のタプルを作り、zip() を使って、これらのタプルからペアを作っていこう。zip() から返される値自体はタプルやリストではなく、タプルやリストにすることができるイテラブルな値。
>>> english = 'Monday', 'Tuesday', 'Wednesday'
>>> french = 'Lundi', 'Mardi', 'Mercredi'
>>>
>>> list(zip(english, french))
[('Monday', 'Lundi'), ('Tuesday', 'Mardi'), ('Wednesday', 'Mercredi')]
>>>
>>> dict(zip(english, french)) #結果をdict()に渡し、英仏辞書もできる。
{'Monday': 'Lundi', 'Tuesday': 'Mardi', 'Wednesday': 'Mercredi'}
>>>
range() による数値シーケンスの生成
range() 関数を使えば、あらかじめリストやタプルなどの大きなデータ構造を作って、そこに値を格納しなくても、指定した範囲の数値のストリームを返すことができ、非常に大きな範囲の数値も作れる。
range( start, end, step ) というスライスとよく似た形式で使い、start を省くと0が先頭になる。唯一の必須引数は end で、スライスと同様に、作成される最後の値は stop の直前。step のデフォルト値は1だが、−1を指定して逆順にすることも可能。
zip() と同様に、 range() はイテラブルなオブジェクトを返すので、戻り値は for ... in で反復処理をするか、リストなどのシーケンスに変換する必要がある。
>>> for x in range(0,3):
... print(x)
...
0
1
2
>>> list(range(0,3))
[0, 1, 2]
>>>
#2から0までの範囲の逆順
>>> for x in range(2, -1, -1):
... print(x)
...
2
1
0
#ステップサイズ2を使って、0から10までの偶数を手に入れる。
>>> list(range(2, -1, -1))
[2, 1, 0]
>>>
>>> list(range(0,11,2))
[0, 2, 4, 6, 8, 10]
>>>
洗濯機が止まったので、一旦中断致します・・・午前中は約1時間でした。
最後までお読みいただき、本当にありがとうございます。 明日も継続して学習のアウトプットを続けていきたいと思いますので、また覗きにきていただけると嬉しいです! 一緒に学べる仲間が増えると、もっと喜びます!笑 これからも宜しくお願い致しますm(__)m