2012-12-03 57 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]) 

決賽是最後的名單