HOWTO · Python
Python에서 목록의 요소 교환
이 자습서는 Python에서 목록의 요소를 교체하는 방법을 보여줍니다.
이 페이지의 내용
Python 리스트에서 요소를 교환하면 각 위치에 있는 값이 바뀝니다. Python의 튜플 언패킹을 사용하면 두 값을 간결하게 맞바꿀 수 있습니다. 임시 변수는 각 대입 단계를 명확히 보여 주며, pop()와 insert()를 사용하면 리스트에서 값을 꺼내 다른 위치에 넣을 수 있습니다. 슬라이스 대입은 두 위치만 맞바꾸는 대신 일정 범위를 뒤집을 때 유용합니다. (튜플 언패킹; 슬라이스 대입)
튜플 언패킹으로 리스트 요소 교환하기
튜플 언패킹은 왼쪽의 인덱스 위치에 값을 대입하기 전에 오른쪽의 값을 먼저 계산합니다. 따라서 별도의 저장 변수 없이 각 위치에 다른 위치의 원래 값을 대입할 수 있습니다. Python 리스트의 인덱스는 0부터 시작하므로 첫 번째 요소의 인덱스는 0입니다.
두 위치를 알고 있다면 다음과 같이 바로 교환할 수 있습니다. 이 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
items = ["red", "blue", "green", "gold"]
items[1], items[3] = items[3], items[1]
print(items)
이 코드와 출력은 영어 원문 그대로 유지됩니다.
['red', 'gold', 'green', 'blue']
이렇게 하면 두 번째 값과 네 번째 값을 제자리에서 교환합니다. 리스트의 길이는 그대로이며, 해당 인덱스가 아닌 요소는 원래 위치에 남습니다.
서로 독립적인 여러 쌍을 교환하려면 인덱스 쌍을 반복 가능한 객체에 담고 각 쌍에 같은 대입을 적용합니다.
items = [6, 2, 7, 8, 5, 9, 10, 3]
for left, right in [(0, 3), (4, 6)]:
items[left], items[right] = items[right], items[left]
print(items)
이 코드와 출력은 영어 원문 그대로 유지됩니다.
[8, 2, 7, 6, 10, 9, 5, 3]
각 반복에서는 리스트의 현재 값을 사용해 한 쌍을 교환합니다. 각 인덱스가 의도한 위치를 가리키는지 확인하세요. 인덱스 쌍이 서로 겹치면 앞선 교환이 이후 교환에서 참조하는 값에 영향을 줄 수 있습니다.
임시 변수를 사용해 요소 교환하기
임시 변수를 사용하면 교환에 필요한 세 번의 대입을 단계별로 확인할 수 있습니다. 먼저 한 값을 저장하고, 그 리스트 위치를 다른 값으로 덮어쓴 다음, 저장해 둔 값을 두 번째 위치에 넣습니다. 단계를 명시하면 주변 로직을 이해하기 쉬운 경우에 유용합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
items = [6, 2, 7, 8]
temp = items[1]
items[1] = items[3]
items[3] = temp
print(items)
임시 변수에는 해당 리스트 위치를 덮어쓰기 전에 원래 값을 저장해야 합니다. 단순한 한 쌍을 교환할 때는 튜플 언패킹이 더 간결합니다. 두 방법 모두 기존 리스트를 수정합니다. 이 코드와 출력은 영어 원문 그대로 유지됩니다.
pop()와 insert()로 요소 교환하기
pop()는 항목을 제거하고 그 값을 반환하는 리스트 메서드입니다. 항목을 제거하면 뒤에 있는 요소가 한 칸씩 왼쪽으로 이동하므로, 제거 후에는 인덱스가 다른 값을 가리킬 수 있습니다. insert()도 리스트 메서드로, 지정한 위치 앞에 값을 넣고 뒤의 요소를 오른쪽으로 이동시킵니다.
원래 인덱스 1과 3에 있던 값을 교환하려면 먼저 더 낮은 인덱스의 값을 제거합니다. 그러면 원래 인덱스 3에 있던 값은 인덱스 2로 이동합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
items = [6, 2, 7, 8]
first = items.pop(1)
second = items.pop(2)
items.insert(1, second)
items.insert(3, first)
print(items)
두 번째 pop()에서 인덱스 2를 사용하는 이유는 첫 번째 제거로 나머지 항목이 이동했기 때문입니다. 두 값을 모두 제거한 뒤 저장한 값을 위치 1과 3에 삽입하면 리스트의 원래 길이를 유지하면서 두 값의 위치를 바꿀 수 있습니다. 이 방법은 직접 대입하는 것보다 단계가 많으므로, 제거와 재삽입이 이미 작업의 일부일 때 주로 유용합니다. 이 코드와 출력은 영어 원문 그대로 유지됩니다.
슬라이스를 뒤집어 일정 범위의 요소 교환하기
슬라이스는 start:stop:step 형식으로 범위를 선택합니다. 시작 인덱스는 포함되고 종료 인덱스는 포함되지 않습니다. 음수 단계는 선택한 값을 역순으로 순회합니다. 슬라이스 대입은 리스트에서 선택한 부분을 다른 시퀀스로 바꿉니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
items = [6, 2, 7, 8]
items[1:4] = items[1:4][::-1]
print(items)
여기서 선택한 범위에는 인덱스 1, 2, 3이 포함되므로 대입하면 세 값의 순서가 모두 뒤집힙니다. 양 끝의 값만 맞바뀌는 것은 아닙니다. 범위를 뒤집어 서로 이웃한 두 값만 교환하려면 두 요소로 된 범위를 선택하세요. 서로 떨어진 두 인덱스의 값을 교환할 때는 튜플 언패킹이 더 명확합니다. 이 코드와 출력은 영어 원문 그대로 유지됩니다.
방법을 선택하고 인덱스 확인하기
두 요소를 바로 교환할 때는 튜플 언패킹을 사용하고, 서로 독립적인 여러 쌍을 교환할 때는 인덱스 쌍을 반복하는 루프를 사용하세요. 명시적인 단계가 주변 코드를 설명하는 데 도움이 된다면 임시 변수를 사용하면 됩니다. pop()와 insert()는 값을 제거하고 넣는 과정에서 리스트의 위치를 바꾸므로 제거할 때마다 인덱스를 다시 계산하세요. 선택한 범위를 뒤집는 것이 목적이라면 슬라이스 대입을 사용하세요.
리스트 인덱스는 0부터 시작합니다. 리스트의 유효한 범위를 벗어난 인덱스로 값을 읽거나 대입하면 IndexError가 발생합니다. 교환하기 전에 각 인덱스가 리스트 범위 안에 있는지, 두 위치가 의도한 값을 가리키는지 확인하세요. 인덱스가 사용자 입력에서 왔거나 다른 데이터로 계산된 경우에는 특히 확인이 필요합니다. 앞 절의 코드와 출력 블록은 영어 원문 그대로 유지됩니다.