我有两个清单;说一个水果和另一个相同长度但无序数字的水果:
例如:
Fruits = ['apple', 'banana', 'pineapple', 'kiwifruit'],
Numbers = [3, 2, 4, 1]
我如何首先分配号码
然后根据他们的新号码订购它们?
即
sortedlist = ['kiwifruit', 'banana', 'apple', 'pineapple'].
到目前为止,我的尝试包括枚举函数和已排序的函数,但我似乎无法分配然后排序。
答案 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])
决赛是最终名单