Python初心者講座(zip関数を使ってみよう)

Python初心者講座(zip関数を使ってみよう)

Python初心者講座(zip関数を使ってみよう)

Python初心者向け、zip関数の使い方




複数のリストから要素を一つずつ取り出すときに便利な、map関数のキホン的な使い方

ナノネ、今回はPythonの組み関数『zip』のキホン的な使い方を学ぼう。

zip関数?、コードの中で使われているのはよく見かけるけど、自分では使ったことないなぁ。

モモノキ、zip関数はどんなことができるの?

zip関数は複数のリストから一つずつ要素を取り出して、タプル形式にまとめた値を返してくれるよ。1番目の要素のまとまり、2番目の要素のまとまり...といった感じで。

なんのこっちゃ、よくわかんないなぁ?

コードで確認したほうが、分かりやすいかも。実際にzip関数を使ってみよう。

In [3]:
list_1 = [1, 2, 3, 4, 5]
list_2 = [10, 20, 30, 40, 50]
list_3 = ['A', 'B', 'C', 'D', 'E']

for t in  zip(list_1, list_2, list_3):
  print(t)
(1, 10, 'A')
(2, 20, 'B')
(3, 30, 'C')
(4, 40, 'D')
(5, 50, 'E')

なるほど。zip関数の引数にリストを複数渡すと、順番に1セットずつ取り出してくれるのね。

うん。リストの代わりにタプル使っても、リストとタプルを混在させてもOKだよ。

In [4]:
list_1 = [1, 2, 3, 4, 5] # list
list_2 = (10, 20, 30, 40, 50) # tuple
list_3 = ('A', 'B', 'C', 'D', 'E') # tuple

for t in  zip(list_1, list_2, list_3):
  print(t)
(1, 10, 'A')
(2, 20, 'B')
(3, 30, 'C')
(4, 40, 'D')
(5, 50, 'E')

zip関数で出力される値はタプル形式になっているよ。型を確認してみよう。

In [5]:
list_1 = [1, 2, 3, 4, 5] # list
list_2 = (10, 20, 30, 40, 50) # tuple
list_3 = ('A', 'B', 'C', 'D', 'E') # tuple

for t in  zip(list_1, list_2, list_3):
  print(type(t))
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>

取得したタプルはインデックスでアクセスできるから、あとはお好みの処理を実行できるよ。たとえばこんな感じで。

In [8]:
fruits = ['apple', 'orange', 'grape', 'melon', 'peach']
prices = [150, 80, 300, 700, 200]
counts = [2, 5, 3, 1, 3]

for t in  zip(fruits, prices, counts):
  total_price = t[1] * t[2]
  print("{0} : {1} x {2} = {3}".format(t[0], t[1], t[2], total_price))
apple : 150 x 2 = 300
orange : 80 x 5 = 400
grape : 300 x 3 = 900
melon : 700 x 1 = 700
peach : 200 x 3 = 600

今は具体的なケースが思いつかないけど、いろいろと使えそうだね。

zip関数の結果は、複数の変数名を指定して直接受け取ることもできるよ。こっちの方が扱いやすいかも。

In [11]:
fruits = ['apple', 'orange', 'grape', 'melon', 'peach']
prices = [150, 80, 300, 700, 200]
counts = [2, 5, 3, 1, 3]

for fruit, price, count in  zip(fruits, prices, counts):
  total_price = price * count
  print("{0} : {1} x {2} = {3}".format(fruit, price, count, total_price))
apple : 150 x 2 = 300
orange : 80 x 5 = 400
grape : 300 x 3 = 900
melon : 700 x 1 = 700
peach : 200 x 3 = 600

下のタプルの使い方と一緒だよ。

In [13]:
(a , b, c) = (1, 2, 3)
print(a)
print(b)
print(c)
1
2
3
In [14]:
a , b, c = (1, 2, 3) # 左辺のカッコは省力可
print(a)
print(b)
print(c)
1
2
3

zip関数の使い方は少し覚えたかも。今度から使ってみるよ。

最後に注意だけど、zip関数に渡すリストの長さがバラバラのときは、一番短いリストに合わせて処理されるよ。

In [16]:
list_1 = [1, 2, 3, 4, 5] # 要素5個
list_2 = [6, 7, 8] # 要素3個
list_3 = [9, 10, 11, 12] # 要素4個

for t in  zip(list_1, list_2, list_3):
  print(t)
(1, 6, 9)
(2, 7, 10)
(3, 8, 11)

上の例だと、一番短いリストの要素数が3だから、3回分しか処理されないんだね。

今回のzip()関数の練習は以上で。またね!

お疲れさまでした。またね!







スポンサーリンク

0 件のコメント :

コメントを投稿