Связать несколько групп данных в Python легко с помощью функции zip().

Примечание: в этом руководстве используется Python 3.7.2.

Что такое функция zip()?

zip(*iterators)

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

a = [1, 2, 3, 4, 5]
b = {"Hello" : "There", 4 : 5}
c = {"a", "b", "c"}
d = zip(a, b, c)

Здесь a — список, b — словарь, а c — набор. Мы можем застегнуть их все! Переменная d получает вывод zip, который называется «zip-объектом». Этот zip-объект является итератором, как и входные данные для функции.

Что возвращает функция?

Давайте превратим только что созданный zip-объект в список.

list(d)
[(1, 'Hello', 'b'), (2, 4, 'a')]

Объект zip содержит еще два итератора, называемых кортежами. Это неизменяемые итераторы. Каждый из них содержит соответствующий элемент a, b и c. Например, первый кортеж в d содержит первый элемент каждого из этих трех итераторов.

Первый объект, переданный функции zip(), содержал пять элементов. Почему в zip-объекте только два кортежа?

При использовании zip() учитываются только первые n элементы в каждом вводе, где n — длина самого короткого ввода. . В этом примере b было самым коротким вводом. Таким образом, zip() принимает только первые два элемента каждого ввода, начиная с len(b) == 2.

Когда мне это понадобится?

Есть множество способов использовать zip(). Например, если у вас есть несколько списков, где каждый индекс соответствует чему-то общему для этих списков. Если у нас есть три списка, age, height и name, где каждый индекс представляет человека, то мы можем использовать zip() для создания кортежей для этих людей.

age = [44, 62, 32]
height = [5.3, 5.7, 5.1]
name = ["Bob", "Joe", "Susan"]
zipped = zip(age, height, name)
list(zipped)
[(44, 5.3, "Bob"), (62, 5.7, "Joe"), (32, 5.1, "Susan")]

Если вы найдете отличный способ использовать zip(), пожалуйста, прокомментируйте его ниже! Я хотел бы услышать, как вам удается его использовать.