鉴于zen of python为什么 zip(*)用于解压而不是名为 unzip()的函数?例如,Transpose/Unzip Function (inverse of 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)])
我在这里缺少什么?
答案 0 :(得分: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
函数不是必需的原因:解压缩只是另一种拉链,只需zip
函数和*
运算符即可轻松实现。