2016-01-07 6 views
3

zen of python Почему zip (*) Используется для распаковки вместо некоторой функции с именем unzip()? Например, Transpose/Unzip Function (inverse of zip)? показывает, как распаковать список.Python: почему используется zip (*) вместо unzip()?

>>> zip(*[('a', 1), ('b', 2), ('c', 3), ('d', 4)]) 
[('a', 'b', 'c', 'd'), (1, 2, 3, 4)] 

Как это больше:

  • Красивые чем некрасиво
  • Явная чем неявное
  • Простой, чем комплекс
  • Читаемые
  • т.д.

, затем

>>> unzip([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) 

?

Что мне здесь не хватает?

+0

Если это не вопрос, то как его улучшить? – SpeedCoder5

+0

Это '*': https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists – deceze

+0

Что касается остальных, * «должен быть __one__ очевидный способ сделать это». * Поскольку 'zip (*)' * может * сделать это, а '*' является очень часто используемым оператором, почему * должен * быть 'unzip' делать то же самое? – deceze

ответ

5

Вы на самом деле не распаковываете, когда делаете zip(*your_list). Ты все еще молниеносно.

zip - это функция, которая может принимать столько аргументов, сколько вы хотите. В вашем случае у вас есть четыре разные последовательности, которые вы хотите закрепить: ('a', 1), ('b', 2), ('c', 3) и ('d', 4). Таким образом, вы хотите назвать zip так:

>>> zip(('a', 1), ('b', 2), ('c', 3), ('d', 4)) 
[('a', 'b', 'c', 'd'), (1, 2, 3, 4)] 

Но ваши последовательности не в отдельных переменных, просто есть список, который содержит их все. Здесь находится * operator. Этот оператор распаковывает список таким образом, что каждый элемент вашего списка становится аргументом функции.

Это означает, что когда вы делаете это:

your_list = [('a', 1), ('b', 2), ('c', 3), ('d', 4)] 
zip(*your_list) 

Python называет zip которой каждый элемент из вашего списка в качестве аргумента, например:

zip(('a', 1), ('b', 2), ('c', 3), ('d', 4)) 

Это почему unzip функция ISN» t необходимо: Распаковка - это еще один вид zip, и его легко достижимо с помощью только функции zip и оператора *.

Смежные вопросы