- en
- Language: ru
- Documentation version: latest
14. zip и unzip - соединить и разъединить списки¶
Zip
Zip - это полезная функция, которая позволяет легко объединить два списка.
После вызова zip возвращается итератор. Для того чтобы увидеть содержимое, завернутое внутрь, нам нужно сначала преобразовать его в список.
Пример:
first_name = ['Joe','Earnst','Thomas','Martin','Charles']
last_name = ['Schmoe','Ehlmann','Fischer','Walter','Rogan','Green']
age = [23, 65, 11, 36, 83]
print(list(zip(first_name,last_name, age)))
# Output
#
# [('Joe', 'Schmoe', 23), ('Earnst', 'Ehlmann', 65), ('Thomas', 'Fischer', 11), ('Martin', 'Walter', 36), ('Charles', 'Rogan', 83)]
Одно из преимуществ zip заключается в том, что он улучшает читабельность циклов for.
Например, вместо того, чтобы использовать несколько входов, вам нужен только один зацикленный список для следующего цикла for:
first_name = ['Joe','Earnst','Thomas','Martin','Charles']
last_name = ['Schmoe','Ehlmann','Fischer','Walter','Rogan','Green']
age = [23, 65, 11, 36, 83]
for first_name, last_name, age in zip(first_name, last_name, age):
print(f"{first_name} {last_name} is {age} years old")
# Output
#
# Joe Schmoe is 23 years old
# Earnst Ehlmann is 65 years old
# Thomas Fischer is 11 years old
# Martin Walter is 36 years old
# Charles Rogan is 83 years old
Unzip
Мы можем использовать функцию zip и для разархивирования списка. На этот раз нам нужен входной список со звездочкой перед ним.
Выходными данными являются разделенные списки.
Пример:
full_name_list = [('Joe', 'Schmoe', 23),
('Earnst', 'Ehlmann', 65),
('Thomas', 'Fischer', 11),
('Martin', 'Walter', 36),
('Charles', 'Rogan', 83)]
first_name, last_name, age = list(zip(*full_name_list))
print(f"first name: {first_name}\nlast name: {last_name} \nage: {age}")
# Output
# first name: ('Joe', 'Earnst', 'Thomas', 'Martin', 'Charles')
# last name: ('Schmoe', 'Ehlmann', 'Fischer', 'Walter', 'Rogan')
# age: (23, 65, 11, 36, 83)