0

我有两个清单;说一个水果和另一个长度相等但数字无序的水果:

例如:

Fruits = ['apple', 'banana', 'pineapple', 'kiwifruit'],
Numbers = [3, 2, 4, 1]

我怎样才能首先分配号码

  • 3到苹果,
  • 2香蕉,
  • 4菠萝和
  • 1到猕猴桃

然后根据他们的新号码对他们进行排序?

IE

sortedlist = ['kiwifruit', 'banana', 'apple', 'pineapple'].

到目前为止,我的尝试包括 enumerate 函数和 sorted 函数,但我似乎无法分配然后排序。

4

5 回答 5

10
sortedlist = [x[1] for x in sorted(zip(Numbers, Fruits))]
于 2012-12-03T05:35:37.933 回答
0

分配可以这样完成

In [25]: d = dict(zip(Numbers, Fruits))

In [26]: d
Out[26]: {1: 'kiwi', 2: 'banana', 3: 'apple', 4: 'pineapple'}

然后您可以根据字典的键进行排序

In [27]: [d[i] for i in sorted(d.keys())]
Out[27]: ['kiwi', 'banana', 'apple', 'pineapple']
于 2012-12-03T05:36:55.070 回答
0

numpy 很酷

import numpy as np
fruits = np.array(['apple', 'banana', 'pineapple', 'kiwi'])
sorted_list = fruits[[2, 1, 3, 0]] #note its 0 based indexing ...
print sorted_list
于 2012-12-03T05:38:04.590 回答
0

怎么样:

Fruits = ['apple', 'banana', 'pineapple', 'kiwi']
Numbers = [3, 2, 4, 1]

New_Fruits = [ Fruits[idx-1] for idx in Numbers ]

这仅适用于您的索引列表 ( Numbers) 是顺序整数。如果 . 甚至会更干净一点Numbers = [ 2, 1, 3, 0 ]

优点是它避免了对 的调用zip,因此它可能会更有效率。缺点是不太通用。您需要有一个适当的索引列表才能使其工作。

于 2012-12-03T05:42:04.697 回答
0
Fruits = ['apple', 'banana', 'pineapple', 'kiwifruit'],
Numbers = [3, 2, 4, 1]
new = []
for x in range(len(Numbers)):
    new.append([Fruits[x],Numbers[x]])
new.sort(key=lambda x: x[1])
final = []
for x in new:
     final.append(x[0])

final是最终名单

于 2015-03-23T16:35:38.553 回答