有没有python方法根据提供的新索引重新排序列表?

时间:2012-01-25 18:37:17

标签: python numpy

说我有一份工作清单: [ 'A', 'B', 'C'] 和索引列表 [2,1,0] 这会将工作清单改为: [ 'C', 'B', 'A']

是否有任何python方法可以轻松完成此操作(工作列表也可能是一个numpy数组,因此更适合使用更具适应性的方法)?谢谢!

3 个答案:

答案 0 :(得分:5)

  • 普通序列:

    L = [L[i] for i in ndx]
    
  • numpy.array

    L = L[ndx]
    

示例:

>>> L = "abc"
>>> [L[i] for i in [2,1,0]]
['c', 'b', 'a']

答案 1 :(得分:3)

从关闭此问题时转换我的评论答案:

正如你提到的numpy,这是这个案例的答案:

对于数值数据,您可以直接使用numpy数组执行此操作详情:http://www.scipy.org/Cookbook/Indexing#head-a8f6b64c733ea004fd95b47191c1ca54e9a579b5

语法是

myarray[myindexlist]

对于非数字数据,对于只读出一次的长数组最有效的方法很可能是这样的:

(myarray[i] for i in myindex) 

注意生成器表达式的()而不是[]用于列表理解。

阅读本文: Generator Expressions vs. List Comprehension

答案 2 :(得分:2)

如果您不介意转换为numpy数组,那么使用numpy非常容易:

>>> import numpy
>>> vals = numpy.array(['a','b','c'])
>>> idx = numpy.array([2,1,0])
>>> vals[idx]
array(['c', 'b', 'a'], 
      dtype='|S1')

要返回列表,您可以执行以下操作:

>>> vals[idx].tolist()
['c', 'b', 'a']