我有一个列表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)].
但是,无论哪里有相同的值,这都不能保持索引。
答案 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}}参数是您正在寻找的。 p>
试试这个:
key
有关详细信息,请参阅sorted()
documentation。
答案 1 :(得分:0)
但是,无论哪里有相同的值,这都不能保持索引。
确实如此,但你正在反向中排序!因此,1
- 1
,2
和6
的索引将按顺序排列6
,2
,1
。翻转索引以正确排序:
[-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]