这看起来像是一种过时的编写降序args ort的方法——一种用于生成索引的例程
[C[i] for i in ind] == sorted(C, reverse=True)
它依赖于
cmp
论点
list.sort
,在Python 3中被删除了,因为它对大多数用例来说都是混乱和低效的。
给定一个列表
ind
,初始化为
range(len(C))
(在Python 2上,其中
range
制作列表),此代码将对以下元素进行排序
ind
基于对应元素值的降序
C
. (
C
不会受到影响)
在Python 3上,这可以写成
C = [4, 3, 2, 5, 6, 6, 8, 7]
ind = list(range(len(C))) # Python 3 needs an explicit conversion to list here
ind.sort(key=lambda i: -C[i])
或
C = [4, 3, 2, 5, 6, 6, 8, 7]
ind = list(range(len(C))) # Python 3 needs an explicit conversion to list here
ind.sort(key=lambda i: C[i], reverse=True)
或
C = [4, 3, 2, 5, 6, 6, 8, 7]
# No explicit list call needed for this one
ind = sorted(range(len(C)), key=lambda i: C[i], reverse=True)
Python 2风格比较器接受2个参数并返回一个整数。返回值应小于、等于或大于0,以分别表示第一个参数应小于、大于或等于第二个参数。
lambda i, j: C[j] - C[i]
将其论点视为
C
,如果第二个参数对应于以下元素,则减法返回负值、0或正值
C
小于、等于或大于第一个参数对应的元素。因此,
i
被认为小于
j
根据该比较器,如果
C[i]
是
更大的
比
C[j]
.
可以说,将比较器写为
lambda i, j: cmp(C[j], C[i])
,显式返回比较结果
C[j]
和
C[i]
,而不是减法。这样做不太容易造成混淆。但是考虑到Python 2有多老,希望你实际上不必维护任何Python 2代码。为了使此代码现代化,您需要切换到
key
功能无论如何。