Как использовать функцию zip() в Python (объединить итерации)
Узнайте, как использовать функцию Python zip() для параллельного объединения нескольких итераций. Создание главного словаря, логика распаковки и обработка несоответствий длины.
Обзор
При переборе наборов данных вам часто придется обрабатывать несколько связанных списков параллельно. Например, объединение списка имен пользователей со списком идентификаторов пользователей или сопоставление координат значений X и Y. Вместо вложенных циклов или доступа к элементам с использованием счетчиков индексации списка Python предоставляет элегантную функцию `zip()`.
Функция `zip(*iterables)` принимает несколько итераций в качестве аргументов и объединяет их, возвращая итератор кортежей, где i-й кортеж содержит i-й элемент из каждой входной итерации. Это позволяет вам легко обрабатывать две или более коллекций одновременно с помощью одного цикла for.
По умолчанию `zip()` прекращает объединение, когда исчерпана самая короткая входная итерация. Любые оставшиеся элементы в более длинных итерациях отбрасываются. Если вы хотите объединять элементы до тех пор, пока не будет исчерпана самая длинная итерация, заполняя пропущенные значения заполнителем, Python предоставляет `zip_longest()` в модуле `itertools` стандартной библиотеки.
Код и вывод выполнения
Этот скрипт демонстрирует параллельную итерацию списка, создание словаря с помощью zip и обработку несоответствий с помощью zip_longest.
from itertools import zip_longest
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]
# 1. Basic Zipping in a loop
print("--- Parallel Iteration ---")
for name, score in zip(names, scores):
print(f"{name} scored {score}")
# 2. Creating a dictionary from two lists
user_dict = dict(zip(names, scores))
print("\nCreated Dictionary:", user_dict)
# 3. Handling unequal list lengths with zip_longest
extra_names = ["Alice", "Bob", "Charlie", "David"]
short_scores = [85, 90]
# Standard zip truncates
print("\nStandard zip output:", list(zip(extra_names, short_scores)))
# zip_longest fills missing values
zipped_long = list(zip_longest(extra_names, short_scores, fillvalue="N/A"))
print("zip_longest output:", zipped_long)--- Parallel Iteration ---
Alice scored 85
Bob scored 90
Charlie scored 95
Created Dictionary: {'Alice': 85, 'Bob': 90, 'Charlie': 95}
Standard zip output: [('Alice', 85), ('Bob', 90)]
zip_longest output: [('Alice', 85), ('Bob', 90), ('Charlie', 'N/A'), ('David', 'N/A')]Пошаговая реализация
- Передайте несколько списков или итераций, которые вы хотите объединить, в функцию zip().
- Распакуйте сгенерированные кортежи в операторе цикла for для чистых параллельных итераций.
- Преобразуйте объект zip в словарь, используя dict(zip(keys_list,values_list)) для сопоставления.
- Импортируйте itertools.zip_longest, чтобы объединить списки неравной длины без потери хвостовых значений.
Часто задаваемые вопросы
Как «разархивировать» заархивированную последовательность кортежей?
Вы можете разархивировать последовательность обратно в отдельные списки, используя оператор распаковки *: list(zip(*zipped_tuples)).
Дублирует ли zip() элементы в памяти?
Нет, zip() возвращает итератор, который возвращает элементы по требованию, что делает его чрезвычайно эффективным с точки зрения использования памяти.
Связанные темы
Узнайте, как выполнять цикл или перебирать словарь Python. Откройте для себя методы перебора ключей, значений и пар «ключ-значение» с помощью понятных и работоспособных примеров.
Как объединить два списка в PythonУзнайте, как лучше всего объединить два списка в Python. Сравните оператор плюс, метод расширения, распаковку списка и параметры цепочки.
Рекомендуемые ресурсы Python
Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.
Функции Python
Мастер-функции Python. Узнайте, как писать код многократного использования с использованием def, определять аргументы, возвращаемые значения и понимать область действия локально и глобально.
Шпаргалка по функциям математического модуля Python
Краткое справочное руководство по стандартной математической библиотеке Python. Узнайте, как использовать тригонометрические, логарифмические, округляющие и арифметические функции.
Python против JavaScript: какой язык программирования лучше?
Всестороннее сравнение Python и JavaScript. Изучите синтаксические различия, производительность, варианты использования (серверная и клиентская части) и примеры кодирования.