파이썬에서는 배열을 리스트와 튜플로 구현 가능하다. 둘은 데이터 컨테이너라고 하며, 튜플의 경우 원소를 변경할 수 없다는 점에서 리스트와 차이가 있다.
리스트
원소를 변경할 수 있는 mutable형 객체.
list01 = []
list02 = [1, 2, 3]
list03 = ['A', 'B', 'C', ] # 맨 마지막 원소에 쉼표 생략 가능
list()는 다양한 자료형 객체를 원소로 하는 리스트를 생성한다.
list(), range()의 조합으로 특정 범위의 정수로 구성된 리스트를 생성할 수 있다.
리스트 원소 개수는 리스트 생성 때 반드시 결정해야하나, 원솟값을 지정하지 않을 경우에는 None을 사용하면 가능하다.
list01 = list([1, 2, 3])
list02 = list('ABC')
list03 = list((1, 2, 3))
list04 = list(range(2000, 2044, 4))
list05 = list = [None] * 5
print(list01)
print(list02)
print(list03)
print(list04)
print(list05)
결과 >
[1, 2, 3]
['A', 'B', 'C']
[1, 2, 3]
[2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036, 2040]
[None, None, None, None, None]
튜플
원소를 변경할 수 없는 immutable 자료형
원소를 쉼표로 구분하고 ()로 둘러싼다. ()는 생략 가능하다.
맨 마지막 원소 뒤의 심표는 생략 가능하지만 원소가 1개인 경우는 생략 불가능.(단순 변수와의 구분을 위함)
tuple1 = ()
tuple2 = 1,
tuple3 = (1,)
tuple4 = (1, 2, 3)
tuple5 = 'a', 'b', 'c'
print(tuple1)
print(tuple2)
print(tuple3)
print(tuple4)
print(tuple5)
결과 >
()
(1,)
(1,)
(1, 2, 3)
('a', 'b', 'c')
tuple()은 여러가지 자료형 객체를 원소로 하는 튜플을 생성한다.
마찬가지로 range()와 결합하여 사용 가능하다.
tuple1 = tuple()
tuple2 = tuple('abc')
tuple3 = tuple([1, 2, 3])
tuple4 = tuple(range(3, 13, 2))
print(tuple1)
print(tuple2)
print(tuple3)
print(tuple4)
결과 >
()
('a', 'b', 'c')
(1, 2, 3)
(3, 5, 7, 9, 11)
Unpack
리스트나 튜플의 원소값들을 여러 변수에 한번에 대입하는 방법
좌변에 변수, 우변에 리스트나 튜플을 둔다.
x = [1, 2, 3]
a, b, c = x
print(a, b, c)
결과 >
1 2 3
인덱스식 사용
리스트와 튜플 모두 정수값 인덱스로 특정 원소에 접근할 수 있다.
x = list(range(1, 10))
print(x[2]) # 앞에서 3번째 원소
print(x[-3]) # 뒤에서 3번째 원소
x[-4] = 3.14
print(x)
결과 >
3
7
[1, 2, 3, 4, 5, 3.14, 7, 8, 9]
x[-4] = 3.14에서 3.14의 값이 복사되어 변수에 대입되는 것이 아니라, x[-4]가 참조하는 객체의 식별 번호가 int형 객체 6에서 float 객체 3.14로 달라졌다는 것을 인지하자.
x[10]은 존재하지 않기 때문에 접근할 수 없고 x[10] = 3.14와 같이 새로운 값을 대입할 수도 없다.
존재하지 않는 원소에 접근하거나 대입해도 새롭게 추가되는 것이 없다는 것을 기억하자.
슬라이드 식 원소 접근
range()와 형태는 동일하다.
list01[i:j] list01[i] ~ list01[j-1]까지 나열
list01[i:j:k] list01[i] ~ list01[j-1]까지 k개씩 건너뛰며 나열
x = list(range(1, 10))
print(x[0:2])
print(x[0:9:2])
print(x[-4:-2])
print(x[3:1]) # 인덱스 번호3 ~ 1까지 출력이지만 오류가 나지 않고 빈값을 출력한다.
print(x[5:12]) # 인덱스 번호가 범위에서 벗어나면 len(x)의 값을 지정한 것으로 간주한다.
print(x[:9]) # 인덱스 번호가 없거나 None이면 0을 지정한 것으로 간주한다.
[1, 2]
[1, 3, 5, 7, 9]
[6, 7]
[]
[6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
x[:] | 모든 원소 |
x[:n] | 맨 앞에서 n번째까지 |
x[n:] | n번째 부터 끝까지 |
x[-n:] | 맨 끝부터 n번째까지 |
x[::n] | 맨 앞부터 n개씩 건너뛰면서 접근 |
x[::-1] | 맨 끝에서부터 전부(순서 뒤집기) |
'파이썬 > 자료구조와 알고리즘' 카테고리의 다른 글
파이썬 자료구조/알고리즘 06 : 기본 자료구조, 배열3 (0) | 2022.02.06 |
---|---|
파이썬 자료구조/알고리즘 05 : 기본 자료구조, 배열2 (0) | 2022.02.06 |
파이썬 자료구조/알고리즘 03 : 파이썬과 C언어의 변수 저장 방식 차이 (0) | 2022.01.22 |
파이썬 자료구조/알고리즘 02 : 알고리즘 기초2 (0) | 2022.01.21 |
파이썬 자료구조/알고리즘 01 : 알고리즘 기초1 (0) | 2022.01.20 |