2012-12-03 58 views
0

我有两个列表;说水果的一个又一个的长度相等,但无序的数字:Python:组合然后排序列表

如:

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

我怎么能首先分配数量

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

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

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

我尝试迄今已包括了枚举功能和排序功能,但我似乎无法排序分配,然后。

+1

的问题已经回答了你,但你真的应该展示一些你自己的代码,并尝试你已经做了 - 这听起来像功课。 – Aesthete

+0

我确实使用了排序函数,但是我的尝试离很好的解决方案还很遥远。另外,这不是一个家庭作业问题。 – user1653402

+0

你的水果列表中有一只鸟! –

回答

10
sortedlist = [x[1] for x in sorted(zip(Numbers, Fruits))] 
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'] 
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 
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,所以它可能会更有效一些。缺点是它不那么一般。你需要有一个合适的索引列表才能工作。

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]) 

决赛是最后的名单