2012-12-03 5 views
0

두 개의 목록이 있습니다. 과일 중 하나와 동일한 길이의 또 다른 있지만, 정렬되지 않은 숫자의 말 :Python : 결합한 다음 목록 정렬

예 : 바나나에 내가 먼저 수를 사과에

  • 3을 할당하는 방법을

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

    ,

  • (2) ,
  • 4 to pineapple and
  • 1 to 키위 과일

두 번째로 새 번호에 따라 주문 하시겠습니까?

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

이 질문은 당신을 위해 대답 된 최종 목록