728x90
배열의 모든 원소 스캔하기
enumerate() 함수는 인덱스와 원소를 짝지어 튜플로 꺼내는 내장함수이다.
range()와의 비교
x = ['a', 'b', 'c', 'd']
for i in range(len(x)):
print(f'x[{i}] = {x[i]}')
x[0] = a
x[1] = b
x[2] = c
x[3] = d
x = ['a', 'b', 'c', 'd']
for tup in enumerate(x):
print(tup)
for i, name in enumerate(x):
print(f'x[{i}] = {name}')
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
x[0] = a
x[1] = b
x[2] = c
x[3] = d
튜플 형태를 반환하므로 인덱스와 값을 따로 뽑아낼 수 있다.
range()의 경우 인덱스 값없이도 리스트를 스캔할 수 있다.
x = ['a', 'b', 'c', 'd']
for i in x:
print(i)
a
b
c
d
리스트의 원소를 역순으로 정렬하기
리스트를 역순으로 재배열하는 알고리즘은 다음과 같다.
(튜플은 이뮤터블, 수정할 수 없으므로 역순으로 정렬할 수 없다.)
이와 같은 방법으로 원소를 재배열하면 교환 횟수는 원소 수에 2를 나눈 몫과 같다는 것을 알 수 있다.
그림처럼 원소 수가 홀수가 되는 경우에는 가운데 원소를 교환할 필요는 없다.
a에서 0번 인덱스는 7번과,
b에서 1번 인덱스는 6번과,
c에서 2번 인덱스는 5번과..
같은 방식으로 교환이 이루어 진다.
a라는 배열의 원소 수가 n개 일때, 맨 마지막 인덱스의 값은 a[n-1]과 같으므로
for i in range(n // 2):
a[i], a[n - i - 1] = a[n - i - 1], a[i]
와 같은 방법으로 원소를 역순으로 배열할 수 있다.
이를 함수를 이용해서 코드를 짜면 다음과 같다.
from typing import MutableSequence
def reverse_array(a: MutableSequence) -> None:
n = len(a)
for i in range(n // 2):
a[i], a[n - i - 1] = a[n - i - 1], a[i]
if __name__ == '__main__':
num = int(input('원소의 개수 입력 : '))
lst = []
for i in range(num):
lst.append(int(input(f'lst[{i}]의 값을 입력 : ')))
reverse_array(lst)
print('len을 역순으로 출력함')
for i in range(num):
print(f'lst[{i}] = {lst[i]}')
원소의 개수 입력 : 5
lst[0]의 값을 입력 : 1
lst[1]의 값을 입력 : 2
lst[2]의 값을 입력 : 3
lst[3]의 값을 입력 : 4
lst[4]의 값을 입력 : 5
len을 역순으로 출력함
lst[0] = 5
lst[1] = 4
lst[2] = 3
lst[3] = 2
lst[4] = 1
리스트는 reverse()함수나 [::-1]을 활용하는 방법으로도 역순으로 정렬할 수 있다.
x.reverse() # 리스트 x의 원소를 역순으로 정렬. 반환X
특정한 값을 받지 않고 그냥 리스트를 역순으로 정렬하기 때문에 변수에 할당하는 방법으로는 사용할 수 없다.
lst = [1, 2, 3, 4, 5]
lst.reverse()
print(lst)
[5, 4, 3, 2, 1]
lst = [1, 2, 3, 4, 5]
new_lst = lst.reverse()
print(new_lst)
print(lst)
None
[5, 4, 3, 2, 1]
다만 reversed()함수의 경우 새로운 이터러블 객체를 생성하므로 reversed() 함수가 반환하는 이터러블 객체를 list() 함수에 넘기고 새로운 리스트를 생성해야 한다.
lst = [1, 2, 3, 4, 5]
new_lst = list(reversed(lst))
print(new_lst)
print(lst)
[5, 4, 3, 2, 1]
[1, 2, 3, 4, 5]
728x90
'파이썬 > 자료구조와 알고리즘' 카테고리의 다른 글
파이썬 자료구조/알고리즘 09 : for ~ else문 응용하기 (0) | 2022.02.10 |
---|---|
파이썬 자료구조/알고리즘 08 : 객체에 따른 인수, 매개변수의 교환 방식 (0) | 2022.02.09 |
파이썬 자료구조/알고리즘 06 : 기본 자료구조, 배열3 (0) | 2022.02.06 |
파이썬 자료구조/알고리즘 05 : 기본 자료구조, 배열2 (0) | 2022.02.06 |
파이썬 자료구조/알고리즘 04 : 기본 자료구조, 배열 (0) | 2022.01.22 |