Вы на самом деле не распаковываете, когда делаете 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
и оператора *
.
Если это не вопрос, то как его улучшить? – SpeedCoder5
Это '*': https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists – deceze
Что касается остальных, * «должен быть __one__ очевидный способ сделать это». * Поскольку 'zip (*)' * может * сделать это, а '*' является очень часто используемым оператором, почему * должен * быть 'unzip' делать то же самое? – deceze