Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python) 리스트 요소 반복·복제하는 3가지 방법

리스트의 값을 그대로 반복해서 늘려야 하는 경우가 종종 있습니다. 예를 들어 데이터 증강이나 출력 포맷을 만들 때 각 요소를 두 번씩 배치해야 할 수 있죠. 파이썬에서는 이러한 값 복제를 여러 가지 방식으로 손쉽게 구현할 수 있습니다. 이 글에서는 대표적인 세 가지 방법을 예제 코드와 함께 살펴보겠습니다.

1. 중첩 for 루프 활용하기

가장 직관적인 방법은 중첩 for 루프를 사용하는 것입니다. 리스트 컴프리헨션(list comprehension) 안에서 각 요소를 내부 루프로 한 번 더 순회하며 복제본을 생성한 뒤, 결과를 하나의 새로운 리스트로 만드는 방식입니다.

예제 코드

# 주어진 리스트
listA = ['Mon', 'Tue', 9, 3, 3]

print("Given list : ", listA)

# 각 요소를 두 번씩 추가
Newlist = [i for i in listA for n in (0, 1)]

# 결과 출력
print("New list after duplication: ", Newlist)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Given list : ['Mon', 'Tue', 9, 3, 3]
New list after duplication: ['Mon', 'Mon', 'Tue', 'Tue', 9, 9, 3, 3, 3, 3]

2. itertools 모듈 활용하기

itertools 모듈은 이터러블(iterable) 객체의 데이터를 효율적으로 조작할 때 유용한 도구들을 제공합니다. 특히 chain.from_iterable 함수를 사용하면 각 요소를 두 개로 묶어 만든 시퀀스들을 하나로 연결해, 원소가 반복된 새로운 리스트를 깔끔하게 얻을 수 있습니다.

예제 코드

import itertools

# 주어진 리스트
listA = ['Mon', 'Tue', 9, 3, 3]

print("Given list : ", listA)

# 각 요소를 두 번씩 추가
Newlist = list(itertools.chain.from_iterable([n, n] for n in listA))

# 결과 출력
print("New list after duplication: ", Newlist)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Given list : ['Mon', 'Tue', 9, 3, 3]
New list after duplication: ['Mon', 'Mon', 'Tue', 'Tue', 9, 9, 3, 3, 3, 3]

3. reduce 함수 활용하기

functools 모듈의 reduce 함수는 첫 번째 인자로 받은 함수를 두 번째 인자로 받은 리스트의 모든 요소에 누적 적용합니다. 여기에 operator 모듈의 add 함수를 함께 사용하면, 각 요소의 복제 쌍(tuple)들이 하나의 리스트로 차례대로 합쳐지면서 요소가 반복된 최종 결과를 얻을 수 있습니다.

예제 코드

from functools import reduce
from operator import add

# 주어진 리스트
listA = ['Mon', 'Tue', 9, 3, 3]

print("Given list : ", listA)

# 각 요소를 두 번씩 추가
Newlist = list(reduce(add, [(i, i) for i in listA]))

# 결과 출력
print("New list after duplication: ", Newlist)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Given list : ['Mon', 'Tue', 9, 3, 3]
New list after duplication: ['Mon', 'Mon', 'Tue', 'Tue', 9, 9, 3, 3, 3, 3]

마무리

세 가지 방법 모두 동일한 결과를 반환하지만, 상황에 따라 적합성이 다릅니다. 간단한 스크립트라면 중첩 for 루프가 가독성 면에서 유리하고, 대용량 데이터를 다룰 때는 itertools 방식이 메모리 효율이 좋습니다. 함수형 프로그래밍 스타일을 선호한다면 reduce를 활용한 접근도 좋은 선택이 될 수 있습니다.