zip()を使った複数のシーケンスの処理
シーケンスとは
シーケンスはリストやタプルなどの並んでいる順番で処理をするもののこと
では実際にzip()を使ったものを使ってみます。これから示す例は班行動で何をするのか、何を昼ごはんに食べるのかというものです。
moths=['number 1', 'number 2', 'number 3']
doings=['play baseball', 'go shopping', 'buy cakes']
lunchs=['sushi', 'ramen', 'udon']
for moth, doing, lunch in zip(moths, doings, lunchs):
print('Your moth is', moth, 'You do', doing, 'You eat', lunch)
Your moth is number 1 You do play baseball You eat sushi
Your moth is number 2 You do go shopping You eat ramen
Your moth is number 3 You do buy cakes You eat udon
まあfor文はシーケンスに入っている要素の''をなくすようなものだと思ってください!!
range()による数値シーケンスの作成
range()を使うことによって値をコンパクトな形でストリームを返すことができる。rangeはrange(最初の数、 指定した数の一つ低い値)まあ説明したほうが早いですね!笑笑
for x in range(0, 5):
print(x)
0
1
2
3
4
って感じになります!!
内包表記
リスト内包表記
リストといえば
list=[1, 2, 3, 4]
とかが普通ですが、内包表記ではリストの中に反復処理などを入れるような感じですね!!
number=[num for num in range(0, 6)]
number
[0, 1, 2, 3, 4, 5]
のようにリストの中に条件を書いたりすることが可能になります。これだとコードが短く済んで処理が早くなりますしみやすくもなります!!
[表示したい結果 for 結果 in どのようなものか]
だいたいこんな感じです笑笑。まあやってみるのが一番わかりやすいと思います!!これから使うコードは「オライリージャパンさんの入門python3」をみてやっていきます。下の方にリンクを貼っておきますのでわかりやすい参考書なのでぜひ読んでみてください!!
rows=range(1, 4)
cols=range(1, 3)
cells=[(row, col) for row in rows for col in cols]
for cell in cells:
print(cell)
(1, 1)
(1, 2)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
このコードは考えてみると簡単でrowsには(1, 2, 3),colsには(1, 2)が入っている。そしてrowとcolをタプル化しています。このようにしてタプルのアンパックを使えばタプルからrow、colを引き抜くことが可能になる。
for row, col in cells:
print(row, col)
1 1
1 2
2 1
2 2
3 1
3 2
辞書包括表記
文字列を辞書化していく。今からやるものは文字列の文字を数えるものである
word='letters'
letters_counts={letter: word.count(letter) for letter in word)
letters_counts
{'l': 1, 'e': 2, 't': 2, 'r': 1, 's': 1}
これは確かに間違っていないことはないが、もっと早く処理する方法がある。この場合だと全てのwordが出てきてその数を数える形になっているが、in wordのところをin set(word)にすることによって一つ一つの値を確認して行なっている一つ目のコードよりも楽になる。
集合内包表記
これはif文とかも使えることができる。
numbers={number for number in range(1, 6) if number%2==0}
numbers
{2, 4}
オライリージャパン入門python3
https://www.oreilly.co.jp/books/9784873117386/