Як стиснути два списки в python


Часто вам може бути цікаво стиснути (або «об’єднати») два списки в Python. На щастя, це легко зробити за допомогою функції zip().

Цей підручник демонструє кілька прикладів практичного використання цієї функції.

Приклад 1: стисніть два списки однакової довжини в один список

Наступний синтаксис показує, як стиснути два списки однакової довжини в один:

 #define list a and list b
a = ['a', 'b', 'c']
b = [1, 2, 3]

#zip the two lists together into one list
list( zip (a,b))

[('a', 1), ('b', 2), ('c', 3)]

Приклад 2: стисніть два списки однакової довжини в словник

Наступний синтаксис показує, як стиснути два списки однакової довжини в словник:

 #define list of keys and list of values
keys = ['a', 'b', 'c']
values = [1, 2, 3]

#zip the two lists together into one dictionary
dict( zip (keys, values)) 

{'a': 1, 'b': 2, 'c': 3}

Приклад 3: стискання двох списків різної довжини

Якщо ваші два списки мають різну довжину, zip() буде скорочено до довжини коротшого списку:

 #define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together into one list
list( zip (a,b))

[('a', 1), ('b', 2), ('c', 3)]

Якщо ви хочете запобігти скороченню zip() до довжини найкоротшого списку, замість цього ви можете скористатися функцією zip_longest() із бібліотеки itertools .

За замовчуванням ця функція заповнює «Немає» для відсутніх значень:

 from itertools import zip_longest

#define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together without truncating to length of shortest list
list( zip_longest (a, b))

[('a', 1), ('b', 2), ('c', 3), ('d', None)]

Однак ви можете використовувати аргумент fillvalue , щоб вказати інше значення заповнення:

 #define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together, using fill value of '0'
list( zip_longest (a, b, fillvalue= 0 ))

[('a', 1), ('b', 2), ('c', 3), ('d', 0)]

Ви можете знайти повну документацію для функції zip_longest() тут .

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *