对于我的应用程序units,errors始终是数值列表。我试着用谷歌搜索每个部分的作用,并找出了 zip 的第一部分。它似乎
ziped_list = zip(units, errors)
Run Code Online (Sandbox Code Playgroud)
简单地将单位和错误配对以生成一个列表[...,(unit, error),...]。然后它传递给 sorted 对元素进行排序。由于我没有为 提供参数key,因此它直接比较了元素,正如文档所暗示的那样:
默认值为 None (直接比较元素)。
既然ziped_list是整数元组的列表,那么它似乎是直接在元组之间进行比较。从我的终端(python 3)中的一个小例子来看,它似乎基于第一个元素进行比较(即使文档暗示比较是元素明智的):
>>> (1,None) < (2,None)
True
>>> (2,None) < (1,None)
False
Run Code Online (Sandbox Code Playgroud)
最后一点解包然后拉上拉链仍然是个谜,我一直无法弄清楚他们做了什么。我知道*解压到位置参数,但*如果我在命令行中尝试,这样做并不能让我确切地看到它在做什么。更让我困惑的是,为什么zip需要将解包列表作为参数传递,例如*sorted如果它已经将zip(*iterable)一个名为 iterable 的变量作为参数传递。(对我而言)为什么我们需要解压缩一些只允许作为输入的可迭代列表的东西似乎令人困惑。
小智 6
如果您不解压缩列表,则将参数作为一个元素传递给参数,因此 zip 无法聚合来自每个可迭代对象的元素。例如:
a = [3, 2, 1,]
b = ['a', 'b', 'c']
ret = zip(a, b)
the_list = sorted(ret)
the_list >> [(1, 'c'), (2, 'b'), (3, 'a')]
Run Code Online (Sandbox Code Playgroud)
zip(*the_list) 等于 zip((1, 'c'), (2, 'b'), (3, 'a'))
输出 : [(1, 2, 3), ('c', 'b', 'a')]
如果你只是使用zip(the_list)等于zip([(1, 'c'), (2, 'b'), (3, 'a')],)
输出: [((1, 'c'),), ((2, 'b'),), ((3, 'a'),)]
您还可以看到**(双星)和 *(星)对 Python 参数有什么作用?
| 归档时间: |
|
| 查看次数: |
1895 次 |
| 最近记录: |