파이썬) 인접한 수 더해서 리스트 만들기 어떻게 하나요??
본문
예를 들어서 [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
네 가지 방법 모두 결과는 동일하지만,
상대적으로 마지막 방법은 퍼포먼스가 떨어질 것이고
리스트 슬라이싱을 활용하는 두 번째 방법이 가장 파이써닉한 방법이 될 것 같네요 ^-^
그럼 편안한 저녁 되세요!
!-->!-->!-->!-->
답변을 작성하시기 전에 로그인 해주세요.