파이썬 자료구조/알고리즘 04 : 기본 자료구조, 배열

728x90

파이썬에서는 배열을 리스트와 튜플로 구현 가능하다. 둘은 데이터 컨테이너라고 하며, 튜플의 경우 원소를 변경할 수 없다는 점에서 리스트와 차이가 있다.

 

리스트

원소를 변경할 수 있는 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] 맨 끝에서부터 전부(순서 뒤집기)

 

728x90