2016-07-19 4 views
0

제가 가지고있는 질문 헤더는 약간 혼란스럽고 단지 헤더를 잘 설명하는 방법을 잘 모르겠습니다.두 개의 파이썬 목록을 비교하고 더 긴 목록의 길이로 짧은 목록을 확장하십시오.

두 개의 목록이 있습니다.

list_1 = [10,20,30,40,50,60,70,80,90] 
list_2 = [10,40,70] 

예상 출력 :

new_list = [10,0,0,40,0,0,70,0,0] 

내가 이걸 어떻게해야합니까? 다음은 내가 무엇을 내가 무엇이 잘못된 것인지 확신하지 못했습니다 :

def expand_list(complete_list, to_be_expand_list): 
    expanded_list = [] 
    for i in complete_list: 
     for j in to_be_expand_list: 
      if i == j: 
       expanded_list.append(j) 
      else: 
       if expanded_list[-1] != 0: 
        expanded_list.append(0) 

    return expanded_list 
+0

코드를 실행하면 어떻게됩니까? 오류가 있습니까? 그렇다면 역 추적은 어디에 있습니까? 실행합니까?하지만 예상대로하지 않습니까? – Kwarrtz

+0

주문이 중요하지 않은 경우 : '[i [1] for list (itertools.zip_longest (list_1, list_2, fillvalue = 0))]' – squiguy

답변

6

이 같은 것을보십시오 :

def expand_list(full_list, short_list): 
    return [x if x in short_list else 0 for x in full_list] 

이은을 사용하여 전체 목록의 길이 인 목록을 생성하기위한 목록 이해력. 짧은 목록에 있던 요소들은 나머지를 모두 0으로 대체합니다.

+0

짧고 달콤한 덕분에! –

2
list_1 = [10,20,30,40,50,60,70,80,90] 
list_2 = [10,40,70] 

new_list = list_1[:] 

for i, v in enumerate(list_1): 
    if v not in list_2: 
     new_list[i] = 0 

print new_list 

결과 :

[10, 0, 0, 40, 0, 0, 70, 0, 0] 

이 list_2에없는 list_1의 위치를 ​​확인하고, 세트 0

2

complete_list의 각 항목에 대해 모든 to_be_expand_list을 수행하고 항목을 추가하는 (거의) 반복 할 때마다 결국이됩니다. 0 항목.

당신은 그것을 변경해야합니다 : 당신이 간단한 접근 방식을 보면

def expand_list(complete_list, to_be_expand_list): 
    expanded_list = [] 
    for i in complete_list: 
     if i in be_expand_list: 
      expanded_list.append(i) 
     else: 
      expanded_list.append(0) 
    return expanded_list 

당신이 list comprehension를 사용할 수 있습니다

[x if x in list2 else 0 for x in list1] 
+2

무엇이 잘못되었는지 설명해 주셔서 감사합니다! –

+0

@WilsonMak 환영합니다 –

관련 문제