Python:组合然后排序列表

时间:2012-12-03 05:32:15

标签: python list sorting

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

例如:

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

我如何首先分配号码

  • 3到apple,
  • 2 to banana,
  • 4菠萝和
  • 1 to kiwifruit

然后根据他们的新号码订购它们?

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

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

5 个答案:

答案 0 :(得分:10)

sortedlist = [x[1] for x in sorted(zip(Numbers, Fruits))]

答案 1 :(得分: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']

答案 2 :(得分: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

答案 3 :(得分: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的调用,因此可能会更有效率。缺点是它不太通用。您需要有适当的索引列表才能工作。

答案 4 :(得分: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])

决赛是最终名单