python数组排序返回索引_排序数组并返回排序数组的原始索引

首先,可以使用^{}将任何值的iterable转换为(index,value)对的iterable。在

但是如果你只是对它们进行排序,它将按索引排序,这并不是很有用。您需要按每个(index,value)对中的值进行排序。通常,在Python中,通过将key function传递给^{}来实现这一点。如该文档中的示例所示,^{}是一个完美的键函数。你可以很容易地修改你的自定义排序函数来使用键函数,就像sorted所做的那样,尽管在没有看到自定义排序函数的情况下演示如何使用键函数有点困难。1

但在本例中,您可以使用Decorate-Sort-Undecorate习惯用法。您只需要按每个(index,value)对中的值进行排序,所以“装饰”所需做的就是将这些对颠倒。而且,如果您只希望索引而不是值来“取消装饰”,只需删除这些值。在

所以:indexed = enumerate(arr)

decorated = ((value, index) for index, value in indexed)

sortedpairs = my_sort_function(decorated)

indices = np.fromiter(index for (value, index) in sortedpairs)

……或者,把它们放在一起:

^{pr2}$

(当然,您可以使用一行代码,但我认为两行代码是最好的可读性平衡点。)

如果你不允许用你的函数来替换你的函数。事实上,文档甚至向您展示了如何做到这一点:def my_enumerate(sequence, start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值