カードゲームを実装する際、異なる配列を同時にループさせて要素を比較するということがあるかと思います。
そういった場合、pythonでは異なる要素を同時にループさせるzipを用いて実装することを最初のうちは考えるかと思います。
しかし、以下のようにzipは短い方の配列に合わせて、長い方をスライスしてしまいますので要素数が多い方が勝ちみたいなケースには対応できません。
a_array = [4, 3, 2]
b_array = [4, 3, 2, 1]
for a, b in zip(a_array, b_array):
print(f'{a}:{b}')
==== 出力 ====
4:4
3:3
2:2
そういった場合は以下のように短い方の配列に仮の値を埋めるような実装を行うかと思います。
a_array = [4, 3, 2]
b_array = [4, 3, 2, 1]
lenDiff = len(a_array) - len(b_array)
if lenDiff > 0:
b_array += [-1] * lenDiff
if lenDiff < 0:
a_array += [-1] * -lenDiff
for a, b in zip(a_array, b_array):
print(f'{a}:{b}')
==== 出力 ====
4:4
3:3
2:2
-1:1
pythonではitertoolsというパッケージにzip_longestという関数においてfillvalueという引数に任意の値を指定すればその値で埋めてくれるようになっているので、こちらを使うといいと思います。
from itertools import zip_longest
a_array = [4, 3, 2]
b_array = [4, 3, 2, 1]
lenDiff = len(a_array) - len(b_array)
for a, b in zip_longest(a_array, b_array, fillvalue=-1):
print(f'{a}:{b}')
==== 出力 ====
4:4
3:3
2:2
-1:1