まぬねこの足跡。。。

備忘録+たのしさ+ひっそりと

Python - zip():要素数取得(タプル変換)

概要

複数のイテラブルオブジェクトの要素を順次、タプル型でまとめる。又は、for文では、順次、出力する。
※通常一番要素の少ないイテラブルに合わせ、打ち切る。


書き方

zip(*iterables, strict=False)

 strict:「厳密な設定」の有無。通常falseで厳密にしない。
 ※strict=True「厳密設定」にすると、各イテラブルの要素数が同一でないと、「ValueError」になる。

ちょこっとメモ

イテラブル (iterable)

for文によって「繰り返すことができる」オブジェクト。
※和訳:繰り返し可能な。

イテレータ(iterator)

「繰り返し、取り出す(生成)」操作を行う。
※和訳:繰り返すもの(反復子)

コード

厳密設定

Trrue (デフォルト)

print(list(zip(('a', 'b', 'c'), (1, 2, 3))))
print(list(zip(('a', 'b'), (1, 2, 3))))
print(list(zip(('a', 'b', 'c'), (1, 2))))
表示イメージ
[('a', 1), ('b', 2), ('c', 3)]
[('a', 1), ('b', 2)]
[('a', 1), ('b', 2)]

False

print(list(zip(('a', 'b', 'c'), (1, 2), strict=True)))
表示イメージ
 ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-84-693cf0eb2ad2> in <cell line: 4>()
      2 print(list(zip(('a', 'b'), (1, 2, 3))))
      3 print(list(zip(('a', 'b', 'c'), (1, 2))))
 ----> 4 print(list(zip(('a', 'b', 'c'), (1, 2), strict=True)))
ValueError: zip() argument 2 is shorter than argument 1

for文

fruits = ['apple', 'banana', 'peach', 'melon', 'orange']
codelists = list(range(5))
for codelist, fruit in zip(codelists, fruits):
    print(f'Code: {codelist} {fruit}')

表示イメージ

Code: 0 apple
Code: 1 banana
Code: 2 peach
Code: 3 melon
Code: 4 orange

zip()後のリストを元のイテラブルへ戻す。

fruits = ['apple', 'banana', 'peach', 'melon', 'orange']
codelists = list(range(5))
print(list(zip(codelists, fruits)))

codelists2, fruits2 = zip(*zip(codelists, fruits))
print(f"fruits2:{fruits2}")
print(f"codelists:{codelists2}")

fruits == list(fruits2) and codelists == list(codelists2)

表示イメージ

[(0, 'apple'), (1, 'banana'), (2, 'peach'), (3, 'melon'), (4, 'orange')]

fruits2:('apple', 'banana', 'peach', 'melon', 'orange')
codelists:(0, 1, 2, 3, 4)

True