Python列表排序

时间:2015-11-29 14:14:57

标签: python list

我有一个列表a = [2, 2, 1, 0, 3, 2, 1, 1, 0, 0].

我希望输出为order = [5, 1, 2, 6, 3, 7, 8]

输出应该是以非增加顺序排列的元素的索引+ 1 的列表,并且只要有 a 的相同值,它应该被排列按索引递增顺序。这里max元素的索引是4,所以5首先出现,然后是索引0,1,5。所以1,2,6来了。

在没有使用循环的情况下,是否有任何简短的pythonic方法来实现这一目标?

我用 reverse = True

尝试了这个
order = [i+1 for (v,i) in sorted(((v, i) for (i, v) in enumerate(a)),reverse=True)].

但是,无论哪里有相同的值,这都不能保持索引。

2 个答案:

答案 0 :(得分:1)

我猜你的结果中不需要零索引。

#bunch of code you got wherever you are #i want to get the primary user of my first company company = Company.first primary_user = company.primary_user #in order to access field from primary_user, firstly do this #if primary_user exists if !primary_user.nil? #do whatever you want with your primary_user puts primary_user.name primary_user.destroy #don't think you want to destroy him end 的{​​{1}}参数是您正在寻找的。

试试这个:

key

有关详细信息,请参阅sorted() documentation

答案 1 :(得分:0)

  

但是,无论哪里有相同的值,这都不能保持索引。

确实如此,但你正在反向中排序!因此,1 - 126的索引将按顺序排列621。翻转索引以正确排序:

[-i+1 for (v,i) in sorted(((v, -i) for (i, v) in enumerate(a)),reverse=True)]
# => [5, 1, 2, 6, 3, 7, 8, 4, 9, 10]