Python代码对输入数组的处理逻辑问询
Python代码对输入数组的处理逻辑问询
嘿,咱们一步步拆解这段代码的处理逻辑,搞明白最终结果是怎么来的~
给定输入
首先我们有原始数组:
C = [4, 3, 2, 5, 6, 6, 8, 7]
代码逐行解析
生成索引数组:
ind = range(len(C))这行代码会生成包含数组
C所有索引的序列,也就是[0, 1, 2, 3, 4, 5, 6, 7](对应C的第0到第7个元素)。自定义规则排序索引:
ind.sort(cmp = lambda i, j: C[j] - C[i])这里的核心是
sort方法的cmp参数:这个lambda函数用来定义两个索引i和j的排序规则:- 当
C[j] - C[i] > 0时,说明C[j]的值比C[i]大,排序后j会排在i前面; - 当结果等于0时,两个索引的相对位置保持原顺序;
- 当结果小于0时,
i会排在j前面。
简单说,这就是按照数组C中对应元素的降序来排序索引。
- 当
对应排序过程
我们把索引和C的对应元素一一对应:
- 索引0 → 4,索引1 → 3,索引2 → 2
- 索引3 → 5,索引4 → 6,索引5 → 6
- 索引6 → 8,索引7 → 7
按照C元素降序排列索引的话:
- 最大元素是8(对应索引6)→ 排第1位
- 其次是7(对应索引7)→ 排第2位
- 接下来是两个6(对应索引4、5,保持原顺序)→ 排第3、4位
- 然后是5(对应索引3)→ 排第5位
- 接着是4(对应索引0)→ 排第6位
- 然后是3(对应索引1)→ 排第7位
- 最小元素是2(对应索引2)→ 排第8位
最终排序后的索引数组就是:
[6, 7, 4, 5, 3, 0, 1, 2]
备注:内容来源于stack exchange,提问作者palanisr
相关产品推荐
相关产品推荐

