zip(list)和zip(* list)之间的区别
这个问题在这里已经有了答案:
zip
想要一堆参数一起压缩,但你拥有的是一个参数(一个列表,其元素也是列表)。 *
在函数调用中“解包”一个列表(或其他迭代),使其每个元素成为一个单独的参数。 所以如果没有*
,你在做zip( [[1,2,3],[4,5,6]] )
。 用*
,你在做zip([1,2,3], [4,5,6])
。
*
运算符在函数调用语句中解压参数。
考虑这一点
def add(x, y):
return x + y
如果你有一个列表t = [1,2]
则可以说add(t[0], t[1])
其是不必要的或冗长可以“解压” t
使用成独立的参数*
操作者像这样add(*t)
。
这就是你的例子中发生的事情。 zip(p)
就像运行zip([[1,2,3],[4,5,6]])
。 Zip在这里只有一个参数,所以它只是将它作为一个元组返回。
zip(*p)
就像运行zip([1,2,3], [4,5,6])
。 这与运行zip(p[0], p[1])
类似,您可以获得预期的输出。
虽然这不是你问的问题的答案,但它应该有所帮助。 由于zip用于组合两个列表,因此您应该按照此list(zip(p[0], p[1]))
来完成您所期望的操作。