gpt4 book ai didi

获取数字列表中元素层次结构的Pythonic方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:07 25 4
gpt4 key购买 nike

我有一个数字列表 a,我想输出一个列表,其中包含 a 中每个元素的层次结构位置(0 表示最高值,1 表示第二高,等等)。

我想知道这是否是执行此操作的最 Pythonic 和最有效的方法。也许有更好的方法?

a = [3,5,6,25,-3,100]
b = sorted(a)
b = b[::-1]
[b.index(i) for i in a]

最佳答案

@ThierryLathuille 的答案仅在输入列表中没有重复项时才有效,因为答案依赖于以列表值作为键的字典。如果列表中可能有重复项,您应该使用 enumerate 生成的索引对输入列表中的项目进行排序,并将这些索引映射到它们的排序位置:

from operator import itemgetter
mapping = dict(zip(map(itemgetter(0), sorted(enumerate(a), key=itemgetter(1), reverse=True)), range(len(a))))

映射变成:

{5: 0, 3: 1, 2: 2, 1: 3, 0: 4, 4: 5}

这样您就可以在列表的长度上迭代索引以按顺序获得排序的位置:

[mapping[i] for i in range(len(a))]

返回:

[4, 3, 2, 1, 5, 0]

关于获取数字列表中元素层次结构的Pythonic方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57434777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com