Про функцію Zip
Як зазначалося раніше, функція “zip” використовується для створення пар з елементів декількох ітерабельних об’єктів. Розглянемо приклад нижче, щоб зрозуміти основний синтаксис та використання функції zip:
list1 = ["a", "b", "c"]list2 = ["яблуко", "кулька", "кішка"]
zip = zip (list1, list2)
друк (список (заархівований))
Перші два твердження у наведеному вище зразку коду визначають два списки, що містять деякі елементи. Далі використовується функція “zip”, передаючи як аргументи змінні “list1” та “list2”. Це основний синтаксис функції “zip”. Вам просто потрібно передати списки або інші допустимі впорядковані ітерабелі як аргументи, елементи яких ви хочете поєднати. Нарешті, оператор print використовується для отримання виводу змінної “zipped”. Після запуску зразка коду, згаданого вище, ви повинні отримати такий результат:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]Зверніть увагу, що функція “zip” повертає об’єкт типу “zip”, а не список. Вам потрібно перетворити його на ітерабельний тип, як показано у заяві на друк вище.
Простіше кажучи, функція “zip” забирає елементи одного і того ж індексу з двох списків і поєднує їх як пару в кортежі. Отже, 0-й елемент із “list1” поєднується з 0-м елементом “list2”, 1-й елемент із “list1” поєднується з 1-м елементом “list2” тощо. Функція Zip рухається зліва направо, і кортеж, що містить спарені елементи, має такий самий індекс, як елементи, що зберігаються в них.
Використання Zip, коли взаємодіючі елементи не мають однакову кількість елементів
У наведеному вище прикладі обидва списки мають однакову кількість елементів. Якщо ви маєте справу з кодом, де обидва списки не мають однакову кількість елементів, функція “zip” зупиниться на останньому елементі списку, що має найменшу кількість елементів.
У наведеному нижче прикладі функція “zip” зупиниться на елементі “c”, незалежно від того, що “list2” має ще один елемент.
list1 = ["a", "b", "c"]list2 = ["яблуко", "кулька", "кішка", "лялька"]
zip = zip (list1, list2)
друк (список (заархівований))
Після запуску зразка коду, згаданого вище, ви повинні отримати такий результат:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]Під час використання функції Zip можна використовувати більше двох взаємодіючих речовин
Зазвичай функція “zip” використовується для порівняння двох об’єктів, що піддаються ітерації. Однак ви можете передати будь-яку кількість ітерацій як аргументи функції “zip”. Принцип зупинки на останньому елементі найкоротшого списку все ще буде застосовним.
list1 = ["a", "b", "c"]list2 = ["яблуко", "кулька", "кішка", "лялька"]
list3 = ["5", "3"]
zip = zip (list1, list2, list3)
друк (список (заархівований))
Після запуску зразка коду, згаданого вище, ви повинні отримати такий результат:
[('a', 'apple', '5'), ('b', 'ball', '3')]Створення індивідуальних списків із об’єкта типу Zip
Якщо у вас вже є об’єкт “zip”, ви можете використовувати його для повторного заповнення окремих списків, які раніше використовувались, коли функція zip була вперше викликана до них.
list1 = ["a", "b", "c"]list2 = ["яблуко", "кулька", "кішка", "лялька"]
list3 = ["5", "3"]
zip = zip (list1, list2, list3)
l1, l2, l3 = zip (* на блискавці)
друк (список (l1), список (l2), список (l3))
Після запуску зразка коду, згаданого вище, ви повинні отримати такий результат:
['a', 'b'] ['apple', 'ball'] ['5', '3']У зразку коду, наведеному вище, об’єкт “zip” спущений за допомогою оператора “*”. Потім спущені результати подаються в іншу функцію виклику zip, яка створює оригінальні списки. Зверніть увагу, що ви не зможете повернути всі елементи у вихідні списки, якщо списки неоднакової довжини використовувались, коли об’єкт “zip” створювався вперше.
Використання Zip, коли ви хочете зберегти елементи з найдовшого ітеративного
У декількох прикладах вище ви могли помітити, що функція “zip” за замовчуванням зупиняється на останньому елементі найкоротшого ітеративного. Що робити, якщо ви хочете, щоб він продовжував ітерацію, поки не досягне останнього елемента найдовшого ітеративного?
У такому випадку вам доведеться використовувати метод “zip_longest ()” із модуля “itertools” Python. Він працює так само, як функція “zip”, з однією невеликою різницею, що вона зупиняється на останньому елементі найдовшого ітеративного типу.
з itertools імпортувати zip_longestlist1 = ["a", "b", "c"]
list2 = ["яблуко", "кулька", "кішка", "лялька"]
list3 = ["5", "3"]
zip = zip_longest (list1, list2, list3)
друк (список (заархівований))
Після запуску зразка коду, згаданого вище, ви повинні отримати такий результат:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]Відсутні значення заповнюються як об’єкти типу “Немає”. Ви також можете вказати своє власне значення для заповнення, передавши додатковий аргумент "fillvalue" методу "zip_longest".
з itertools імпортувати zip_longestlist1 = ["a", "b", "c"]
list2 = ["яблуко", "кулька", "кішка", "лялька"]
list3 = ["5", "3"]
zip = zip_longest (list1, list2, list3, fillvalue = "my_value")
друк (список (заархівований))
Після запуску зразка коду, згаданого вище, ви повинні отримати такий результат:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'doll ',' my_value ')]Висновок
Функцію Zip можна емулювати, використовуючи деякі цикли та оператори умов. Однак це допомагає підтримувати впорядкованість та чистоту коду, видаляючи непотрібні багатослів'я та повторювані твердження.