🐍 zip() – параллельная обработка данных без лишних индексов
Очень распространённый код:
for i in range(len(names)):
print(names[i], scores[i])
Работает, но:
• зависим от длины списков
• плохо читается
• легко словить ошибку с индексами
Правильнее так 👇
for name, score in zip(names, scores):
print(name, score)
Почему zip() лучше?
✅ Читаемость – Сразу видно, какие данные обрабатываются вместе.
✅ Безопасность – zip() остановится на самом коротком итерируемом объекте.
✅ Минимум шума – Никаких range, len, индексов и лишней логики.
Типичный кейс: несколько источников данных
users = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 28]
for user, age in zip(users, ages):
print(f"{user}: {age}")
Частая ошибка ❌
for i in range(len(a)):
print(a[i], b[i])
Если b короче – получишь IndexError. zip() просто не даст коду упасть.
Полезный приём
Если нужен индекс – комбинируем с enumerate():
for i, (x, y) in enumerate(zip(a, b)):
print(i, x, y)
Важно помнить
• zip() не проверяет, что длины равны
• если важно совпадение размеров — проверяй явно