hack のためのネタ帳, etc,,,

状況

で、複数の配列から値を一つずつ順に取り出し、複数の変数に放り込んで for ループを回したい状況が生じた。

python for in multiple variables」でググると以下のページを見つけた。
こんな感じか?とやってみたら
for i,j in [[1,2],[3,4]]:
  print(i)
  print(j)
1
2
3
4
for i,j in [[1,2,3],[4,5,6]]:
  print(i)
  print(j)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-14-d15f354f447c> in <module>()
----> 1 for i,j in [[1,2,3],[4,5,6]]:
      2   print(i)
      3   print(j)

ValueError: too many values to unpack (expected 2)
Oh!、そうじゃないよ
ということで、二次元リストの転置する必要が生じた。

解法

python 2d-list transpose」でググったら以下のページを見つけた。

numpy の array や pandas の df には転置があるらしい。
素の python で list を転置したい場合は zip(*[x, y]) で可能とのこと。

こんな感じ。
for i,j in zip(*[[1,2,3],[4,5,6]]):
  print(i)
  print(j)
1
4
2
5
3
6

と、まぁ出来はしたんだが、あとから、最初のページ読み直していたら、ちゃんと書いてるし、わざわざリストに放り込まなくても zip(x,y) で問題なかった。
for i,j in zip([1,2,3],[4,5,6]):
  print(i)
  print(j)
1
4
2
5
3
6

ここで出てきた「*」の名称は「* アンパック」または「* unpacking」で良いのだろうか?
JavaScript で言うところのスプレッド構文(...)という理解でいいんだよな?

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます