Связать несколько групп данных в 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(), пожалуйста, прокомментируйте его ниже! Я хотел бы услышать, как вам удается его использовать.