2016-08-30 3 views
0

내 문제는 여기입니다. 이 내가 모든 'A'코드에서 목록의 위치를 ​​찾아 낼 방법이 개 목록 숫자가있는 다른 목록에 해당 항목 인쇄

codes = ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l'] 
pas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 

있습니다. 그리고 pas 목록에 해당 항목을 인쇄하십시오. 출력이되어야합니다. 또한 .sort() 함수를 사용하여 정렬해야합니다.

1 
4 
8 
11 

나는이 코드를 생각해 냈습니다. (그 doesnt 일)

qwer = [i for i,x in enumerate(codes) if x == common] 
qwe = [qwer[i:i+1] for i in range(0, len(qwer), 1)] 
print(pas[qwe]) 

올바른 출력을 얻는 가장 좋은 방법은 무엇입니까?

+0

그는'codes' 목록에서 문자열이나 변수로되어 있습니까? – Flippym

답변

4
>>> pas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
>>> codes = ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l'] 
>>> result = sorted(i for i,j in zip(pas,codes) if j=='a') 
>>> for i in result: 
...  print i 
... 
1 
4 
8 
11 
+0

이 코드는 어떻게하면 각 줄을 새로운 줄에 인쇄 할 수 있습니까? –

+0

항목을 만들고 인쇄하는 동안 목록을 반복합니다. –

+0

@WillW 업데이트. –

1

달성 방법에는 여러 가지가 있습니다. 귀하의 예를 들어 목록은 다음과 같습니다 enumerate를 사용 :

>>> codes = ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l'] 
>>> pas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 

접근 한

>>> indices = [pas[i] for i, x in enumerate(codes) if x == "a"] 
indices = [1, 4, 8, 11] 

접근법 2 : 사용 zip :

>>> [p for p, c in zip(pas, codes) if c == 'a'] 
[1, 4, 8, 11] 
0

그냥 anothe 추가 연구 방법 NumPy와 사용 :

import numpy as np 
codes = np.array(['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l']) 
pas = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) 

index = np.where(codes=='a') 
values = pas[index] 

In [122]: print(values) 
[ 1 4 8 11] 
0
codes = ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'i', 'j', 'a', 'l'] 
pas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 

[pas[index] for index, element in enumerate(codes) if element == "a"] 
+2

이 코드는 문제를 해결하는 데 도움이 될 수 있지만 _why_ 및/또는 _how_는 질문에 대답하지 않습니다. 이러한 추가적인 맥락을 제공하면 장기적인 교육적 가치가 크게 향상 될 것입니다. 어떤 제한 사항 및 가정이 적용되는지를 포함하여 설명을 추가하기 위해 답을 [편집하십시오]. –