说我有一份工作清单: [ 'A', 'B', 'C'] 和索引列表 [2,1,0] 这会将工作清单改为: [ 'C', 'B', 'A']
是否有任何python方法可以轻松完成此操作(工作列表也可能是一个numpy数组,因此更适合使用更具适应性的方法)?谢谢!
答案 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)
注意生成器表达式的()而不是[]用于列表理解。
答案 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']