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

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

QA

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

본문

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

이 질문에 댓글 쓰기 :

답변 1

안녕하세요?

 

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

 

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

 

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

 

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

 


list_a = [3, 9, -12, 36, -32, 5, 15, 19, -21, 3, 7]
list_b = []
 
for idx in range(len(list_a) - 1):
    list_b.append(list_a[idx] + list_a[idx + 1])

 

 

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

 

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

 


list_a = [3, 9, -12, 36, -32, 5, 15, 19, -21, 3, 7]
list_b = []
 
for idx in range(len(list_a) - 1):
    list_b.append(sum(list_a[idx : idx + 2]))

 

 

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

 

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

 


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() # 우측부터 더하기 때문에 리스트를 역순으로 뒤집어야 합니다.

 

 

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

 

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

 


list_a = [3, 9, -12, 36, -32, 5, 15, 19, -21, 3, 7]
list_b = []
 
for idx, a in enumerate(list_a, 1):
    try:
        list_b.append(a + list_a[idx])
    except:
        pass

 

 

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

 

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

 

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

 

그럼 편안한 저녁 되세요!

답변을 작성하시기 전에 로그인 해주세요.
전체 304
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT