Як створити стиснення списків у списку


91

Я хочу заархівувати наступний список списків:

>>> zip([[1,2], [3,4], [5,6]])
[[1,3,5], [2,4,6]]

Цього можна досягти за допомогою поточної zipреалізації, лише якщо список розділений на окремі компоненти:

>>> zip([1,2], [3,4], [5,6])
   (1, 3, 5), (2, 4, 6)]

Не можу зрозуміти, як розділити список і передати окремі елементи zip. Переважним є функціональне рішення.

Відповіді:


146

Спробуйте це:

>>> zip(*[[1,2], [3,4], [5,6]])
[(1, 3, 5), (2, 4, 6)]

Див. Розпакування списків аргументів :

Зворотна ситуація виникає, коли аргументи вже є у списку або кортежі, але їх потрібно розпакувати для виклику функції, що вимагає окремих позиційних аргументів. Наприклад, вбудована функція range () очікує окремих аргументів старту та зупинки. Якщо вони недоступні окремо, напишіть виклик функції за допомогою * -оператора, щоб розпакувати аргументи зі списку або кортежу:

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]

4
Щоб дізнатися, як це працює, див. Docs.python.org/tutorial/… .
ameer

2
Я хотів би побачити альтернативу, якщо у вас є список із мільйоном записів. Можливо, це не гарна ідея розпаковувати мільйон предметів під час виклику функції ...
Blixt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.