테스트 사이트 - 개발 중인 베타 버전입니다

파이썬) 인접한 수 더해서 리스트 만들기 어떻게 하나요??

dlaconn3884 4년 전 조회 4,343

예를 들어서 [3, 9, -12, 36, -32, 5, 15, 19, -21, 3, 7] 이라고 하면 바로 오른쪽 숫자와 더해서 [12, -3, 24, 4, -27, 20, 34, -2, -18, 10] 이렇게 새로운 리스트를 만들고 싶은데 어떻게 할까요?

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

I
4년 전

안녕하세요?

 

range 함수의 파라미터로 (리스트의 길이 - 1)을 넣으면

 

0부터 (리스트의 길이 - 2)까지 for 문을 돌릴 수 있기 때문에,

 

(이를 인덱스로 하여 리스트에 접근한 값) + (이보다 1 증가한 값을 인덱스로 리스트에 접근한 값)을 구하여

 

새로운 리스트를 생성할 수 있습니다.

 

</p>

<p>list_a = [3, 9, -12, 36, -32, 5, 15, 19, -21, 3, 7]

list_b = []</p>

<p> </p>

<p>for idx in range(len(list_a) - 1):

    list_b.append(list_a[idx] + list_a[idx + 1])</p>

<p>

 

 

위 방법에서 직접 덧셈을 하지 않고 리스트 슬라이싱과 sum() 함수를 활용하면

 

조금 더 간단하게 해결할 수 있겠네요 ^^

 

</p>

<p>list_a = [3, 9, -12, 36, -32, 5, 15, 19, -21, 3, 7]

list_b = []</p>

<p> </p>

<p>for idx in range(len(list_a) - 1):

    list_b.append(sum(list_a[idx : idx + 2]))</p>

<p>

 

 

한편 .pop() 메서드를 활용하여

 

리스트의 요소를 우측부터 하나씩 제거하며 더하는 방법으로 해결할 수도 있겠죠~

 

</p>

<p>list_a = [3, 9, -12, 36, -32, 5, 15, 19, -21, 3, 7]

list_b = []

 

for _ in range(len(list_a) - 1):

    last = list_a.pop()

    list_b.append(last + list_a[-1])

list_b.reverse() # 우측부터 더하기 때문에 리스트를 역순으로 뒤집어야 합니다.</p>

<p>

 

 

한편 try ~ except 문으로 예외처리를 한다면

 

enumerate의 start 값을 1로 지정하여 다음과 같이 작성할 수도 있겠네요 ^^

 

</p>

<p>list_a = [3, 9, -12, 36, -32, 5, 15, 19, -21, 3, 7]

list_b = []</p>

<p> </p>

<p>for idx, a in enumerate(list_a, 1):

    try:

        list_b.append(a + list_a[idx])

    except:

        pass</p>

<p>

 

 

네 가지 방법 모두 결과는 동일하지만,

 

상대적으로 마지막 방법은 퍼포먼스가 떨어질 것이고

 

리스트 슬라이싱을 활용하는 두 번째 방법이 가장 파이써닉한 방법이 될 것 같네요 ^-^

 

그럼 편안한 저녁 되세요!

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

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

로그인