파이썬 기초 : 두 리스트를 비교하여 제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]
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)