鉴于python的禅,为什么zip(*)用于解压而不是一些名为unzip()的函数?例如Transpose/Unzip Function(zip的反转)?显示如何解压缩列表.
>>> 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)])
?
我在这里错过了什么?
当你这样做时,你实际上并没有解压缩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)]
但是你的序列不在单独的变量中,你只需要一个包含它们的列表.这是*
操作符进入的位置.此运算符以列表的每个元素成为函数参数的方式解压缩列表.
这意味着当你这样做时:
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
不需要一个功能的原因:解压缩只是另一种拉链,只需要zip
功能和*
操作员就可以轻松实现.