<MyRusakov.ru />

Создание нейросетей на Python

Создание нейросетей на Python

Этот курс научит Вас созданию нейросетей на Python. Курс рассчитан на начинающих. Вся информация идёт от простого к сложному очень маленькими шажками. При этом глубокое знание математики не требуется. Поскольку в курсе Вы будете получать эти знания по мере необходимости.

Из курса Вы узнаете всю необходимую теорию и терминологию. Научитесь создавать нейросети самых разных архитектур и обучать их. Также Вы создадите собственный фреймворк. Что очень важно проделать для грамотного использования того же PyTorch. Затем Вы изучите и сам PyTorch.

Помимо уроков к курсу идут упражнения для закрепления материала.

Ещё Вы получите Бонусы, дополняющие основной курс: "Распознавание изображений", "Анализ настроения по тексту отзыва", "Программирование на Python с Нуля до Гуру".

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

zip в Python: как объединять списки и обходить несколько последовательностей

zip в Python: как объединять списки и обходить несколько последовательностей

zip в Python — встроенная функция, которая объединяет элементы нескольких итерируемых объектов по позициям. Проще говоря, она берёт первый элемент из первого списка, первый элемент из второго списка, складывает их в пару, затем делает то же самое со вторыми элементами и так далее.

Это один из тех инструментов, который новички часто недооценивают. Но как только вы начинаете обрабатывать таблицы, списки пользователей, цены, оценки или любые связанные данные, zip() делает код короче и понятнее.

Базовый пример zip()

Допустим, у нас есть список имён и список возрастов:

names = ["Анна", "Игорь", "Мария"]
ages = [25, 31, 19]

for name, age in zip(names, ages):
    print(name, age)

Результат:

Анна 25
Игорь 31
Мария 19

Без zip() пришлось бы работать с индексами, что обычно выглядит менее аккуратно:

for i in range(len(names)):
    print(names[i], ages[i])

Такой код работает, но он более хрупкий: легко ошибиться с индексом или получить ошибку, если длины списков отличаются.

Что возвращает zip в Python

В Python 3 функция zip() возвращает не список, а итератор. Это значит, что значения создаются по мере обхода, а не хранятся все сразу в памяти.

names = ["Анна", "Игорь"]
ages = [25, 31]

result = zip(names, ages)
print(result)

Вы увидите примерно такое:

<zip object at 0x...>

Чтобы посмотреть данные, преобразуйте результат в список:

pairs = list(zip(names, ages))
print(pairs)

Результат:

[("Анна", 25), ("Игорь", 31)]

Важный момент: итератор можно пройти только один раз.

items = zip([1, 2, 3], ["a", "b", "c"])

print(list(items))  # [(1, 'a'), (2, 'b'), (3, 'c')]
print(list(items))  # []

Если данные нужны несколько раз, заранее сохраните их в список.

Как создать словарь с помощью zip

Один из самых популярных сценариев — создать словарь из двух списков: ключей и значений.

keys = ["name", "age", "city"]
values = ["Анна", 25, "Москва"]

user = dict(zip(keys, values))
print(user)

Результат:

{'name': 'Анна', 'age': 25, 'city': 'Москва'}

Это удобно при обработке CSV-файлов, таблиц, API-ответов и любых данных, где отдельно есть названия полей и значения.

zip с тремя и более списками

zip() умеет объединять не только два объекта, но и больше.

names = ["Анна", "Игорь", "Мария"]
grades = [5, 4, 5]
groups = ["A", "B", "A"]

for name, grade, group in zip(names, grades, groups):
    print(f"{name}: оценка {grade}, группа {group}")

Такой подход хорошо читается: сразу видно, какие данные связаны друг с другом.

Что будет, если длины списков разные

По умолчанию zip() останавливается на самом коротком объекте.

names = ["Анна", "Игорь", "Мария"]
ages = [25, 31]

print(list(zip(names, ages)))

Результат:

[("Анна", 25), ("Игорь", 31)]

Мария пропала, потому что для неё нет возраста. Иногда это нормально, но в реальных проектах такая ситуация может скрыть ошибку в данных.

Начиная с Python 3.10 у zip() есть параметр strict=True. Он заставляет Python выбросить ошибку, если длины отличаются:

names = ["Анна", "Игорь", "Мария"]
ages = [25, 31]

for name, age in zip(names, ages, strict=True):
    print(name, age)

Если списки разной длины, будет ValueError. Это полезно, когда данные обязаны соответствовать друг другу.

zip_longest: если нужно не обрезать данные

Если вы хотите сохранить элементы из самого длинного списка, используйте zip_longest из модуля itertools.

from itertools import zip_longest

names = ["Анна", "Игорь", "Мария"]
ages = [25, 31]

for name, age in zip_longest(names, ages, fillvalue="не указано"):
    print(name, age)

Результат:

Анна 25
Игорь 31
Мария не указано

Это удобно для отчётов, импорта данных и ситуаций, где пропущенное значение лучше заменить заглушкой, чем потерять строку целиком.

Как «распаковать» список пар обратно

С помощью zip() можно не только объединять данные, но и разделять их обратно. Для этого используется оператор распаковки *.

pairs = [("Анна", 25), ("Игорь", 31), ("Мария", 19)]

names, ages = zip(*pairs)

print(names)
print(ages)

Результат:

('Анна', 'Игорь', 'Мария')
(25, 31, 19)

Обратите внимание: результатом будут кортежи. Если нужны списки, используйте list().

zip вместе с enumerate

Иногда нужно одновременно получить индекс и данные из нескольких списков. В этом случае можно совместить enumerate() и zip().

products = ["Ноутбук", "Мышь", "Клавиатура"]
prices = [70000, 1500, 4000]

for index, (product, price) in enumerate(zip(products, prices), start=1):
    print(f"{index}. {product} — {price} руб.")

Результат:

1. Ноутбук — 70000 руб.
2. Мышь — 1500 руб.
3. Клавиатура — 4000 руб.

Практический пример: считаем итоговую стоимость товаров

Представим корзину интернет-магазина: отдельно есть товары, цены и количество.

products = ["Книга", "Ручка", "Тетрадь"]
prices = [600, 50, 120]
amounts = [2, 5, 3]

total = 0

for product, price, amount in zip(products, prices, amounts, strict=True):
    cost = price * amount
    total += cost
    print(f"{product}: {amount} шт. × {price} = {cost}")

print(f"Итого: {total}")

Здесь strict=True защищает нас от ситуации, когда для какого-то товара нет цены или количества.

Частые ошибки при использовании zip

  • Ожидать список вместо итератора. Если нужно увидеть результат, используйте list(zip(...)).
  • Забывать про разные длины. Обычный zip() молча обрезает данные по самому короткому объекту.
  • Повторно использовать один и тот же zip-объект. Итератор после первого прохода становится пустым.
  • Использовать индексы там, где лучше zip. Если вы обходите несколько списков параллельно, zip() почти всегда читается лучше.

Рекомендации

  • Используйте zip(), когда элементы разных списков логически связаны по позиции.
  • Для критичных данных добавляйте strict=True, если работаете на Python 3.10+.
  • Для сохранения всех элементов при разной длине используйте itertools.zip_longest().
  • Не превращайте результат в список без необходимости: итератор экономит память на больших данных.

Если вы хотите не просто запомнить отдельные функции, а уверенно освоить основы языка, практику и типичные задачи, посмотрите курс «Python с нуля до уверенной разработки». Он хорошо подойдёт тем, кто хочет выстроить знания последовательно, а не собирать их хаотично из разных источников.

Вывод

zip в Python — простой, но мощный инструмент для параллельного обхода данных. Он помогает избавиться от лишних индексов, делает код компактнее и снижает вероятность ошибок. Освойте базовый zip(), параметр strict=True, zip_longest() и распаковку через * — и вы сможете решать множество повседневных задач чище и быстрее.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.