파이썬 기초 : 두 리스트를 비교하여 제3의 리스트 만들기
조회수 1603회
li_test1 = [1, 11, 3, 14, 5]
li_test2 = [12, 2, 13, 4, 15]
li_test3 = []
for i in range(len(li_test1)):
if li_test1[i] > li_test2[i]:
li_test3.append(li_test1[i])
elif li_test3[i-1] > li_test1[i] :
li_test3.append(li_test2[i])
li_test3 리스트를 만들면서 바로 사용할수 있나요?
elif li_test3[i-1] > li_test1[i] :
사용할 수 있는 방법은 없을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
권장하는 방법은 아닙니다만 불가능하지는 않습니다.
작성하신 코드에서 발생하는 문제는, 두 리스트의 값을 비교했을 때 첫번째 리스트에 있는 값보다 두번째 리스트에 있는 값이 작거나 같으면 새로운 리스트를 index를 이용해 무조건 참조하는데에 있습니다.
맨 처음에는 리스트가 비어있는데 index를 이용해 값을 불러오려고 하면 문제가 발생할 수 있습니다.
또한, 경우에 따라서는 새로운 리스트에 값을 추가하지 않기도 하는데, 새로운 리스트의 값을 참조할 때에는 무조건 이전 단계의 for문에서 사용한 index를 다시 사용하려고 하는 데에서도 문제가 발생할 수 있습니다.
리스트의 길이는 2인데 3 이상의 값을 indexing하려고 하면 비어있는 리스트를 indexing할 경우와 마찬가지로
list index out of range
에러가 발생합니다.
초기에 리스트가 비어있을 때를 위한 코드를 추가하시면 해당 오류를 방지할 수 있습니다.
또한, 새로운 리스트에 마지막으로 추가된 값을 확인하시려면
[i-1]
대신[-1]
을 사용하시는 것으로도 충분합니다. -
다음과 같은 식으로 구현은 가능한데, 이걸 어디에 어떻게 쓰려는 것인지 모르겠네요.
앞서 작성된 답변처럼 li_test3의 요소가 다른 두 리스트보다 적기 때문에 제대로 작동한도고 볼 수는 없습니다.
또한 기준이 되는 것이 하나 있어야 할 텐데, 그런 것도 없이 위치에 따라 랜덤하게 나타나는 숫자를 비교하는 이유도 모르겠고요.
li_test1 = [1, 11, 3, 14, 5] li_test2 = [12, 2, 13, 4, 15] li_test3 = [] for a, b in zip(li_test1, li_test2): if a>b: li_test3.append(a) """ a b 1 12 11 2 3 13 14 4 5 15 """ print(li_test3) # [11, 14] for a, b, c in zip(li_test1, li_test2, li_test3): if c-1 > a: li_test3.append(b) print(li_test3) # [11, 14, 12, 2, 13, 15]
댓글 입력