본문 바로가기

자료구조

[Python/파이썬] - 배열 (Array)

파이썬의 배열

파이썬 내에서의 배열(Array)은 다른 프로그래밍 언어와는 조금 다른 특징들을 가지고 있습니다.

C++를 예로 들자면, C++의 배열은 변수를 선언할 때, 크기(size)와 형식(int, string, bool)을 정해

주어야만 합니다. 

int myArray[7] = {11, 9, 5, 8, 7, 6, 4};

아래 그림에서 보이는 것과 같이 배열을 선언했을때의 크기(7)와 타입(int)이 정해준 데로 생성된 것을 볼 수 있습니다.

C++언어에서의 배열

 

앞의 예와는 다르게, 파이썬 내에서 배열은  동적 배열로써 크기 조정이 가능하고, 원소의 데이터 타입이 동일하지 않아 되며, 심지어 다른 배열(list or tuple) 원소 갖는 것도 허용이 됩니다.

myArray = [1, ‘Hi’, True, [2,3,4], (6,7)]

파이썬 내에서의 배열

리스트와 튜플

이러한 특성을 가진 파이썬의 배열은 여러 원소를 하나의 묶음으로 관리하고 원소간에는 순서(order)

존재하여 인덱스(Index) 통해 접근합니다. 파이썬의 배열은 리스트(list) 튜플(tuple)이라는 두가지 타입을 사용합니다.

 

리스트(list) "[  ]" 네모난 괄호 사용하여 정의하며 원소를 수정할 있는 특성 갖고 있습니다.

myList = [1, ‘Hi’, True, [2,3,4],(6,7)]
print(type(myList))  
#<type ‘list’>

 

튜플(Tuple) “(  )” 둥근 괄호 사용하여 정의하며, 한번 정의한 원소를 수정 할 없는 특성 있습니다. 주의할 점은 원소가 하나만 있는 튜플 타입은 일반적인 괄호와 구분이 되지 않기 때문에 (‘A’ , ) 같이 사용하면 튜플 타입임을 명시할 있습니다.

myTuple= (1, “Hi”, True, [2,3,4], (6,7))
print(type(myTuple)) 
#<type ‘tuple’>

 

위에 언급했듯이 튜플 타입은 수정이 불가능합니다. 그렇게 때문에 만약 기존 튜플에서 원소를 수정해야한다면 새로운 튜플을 생성하는 방법으로 수정이 가능합니다.

newTuple = (2 , 3, 4, 5, 6)
newTuple = (1, ) + newTuple
print(newTuple) 
# (1,2,3,4,5,6)

 

배열 초기 선언

아래에는 다양하게 방법들로 파이썬의 배열을 초기에 선언하는 방법들입니다. 

1. 비어있는 배열(리스트) 초기화

비어있는 배열로 리스트를 만들 경우 간단히 myList = [ ] 혹은 myList = list()을 사용해서 만들 수 있습니다.

# 방법 1.
myList = []
print(myList) # []

# 방법 2.
myList = list()
print(myList) # []

2. 배열(리스트)에 값 선언 

배열에 초기 값을 넣어서 선언하는 경우 직접 리스트에 값을 넣는 경우, 혹은 range, if-else, for문을 사용하여 값을 초기에 선언하며 생성할 수 있습니다. 

# 방법 1. [ ]안에 값 직접 입력
myList = [True,'Two', (3,4), 6, [6,7]]
print(my_list) # [True,'Two', (3,4), 6, [6,7]]

# 방법 2. range 객체를 통해 생성 
myList = [x for x in range(0,10,2)] # 0~9까지 1개씩 건너뛰며 선택
print(myList) # [0,2,4,6,8)

# 방법 3. range객체와 if절을 통해 생성
myList = [x for x in range(10) if x %3 == 0] # 0~9까지 3으로 나눴을 때 나머지가 0일때 선택
print(myList) # [0,3,6,9]

# 방법 4. range객체, if-else절을 통해 생성
myList = [x.upper() if x.isupper() else x.upper() for x in 'abCdE']
print(myList) # ['A', 'B', 'C', 'D', 'E']

3. list() 함수 사용법  

배열(리스트)은 list() 함수를 호출해서 만들 수도 있습니다. list() 안에 리스트, 튜플, 문자열, 딕셔너리 타입의 키와 값 등을 넣어주면 list타입으로 바꾸어 줍니다. 단, list( ) 괄호 안에는 1개의 값만 받을 수 있습니다. 

# 방법 1. 튜플 -> 리스트
myTuple = (True,'Two', (3,4), 6, [6,7])
myList = list(myTuple)
print(myList) # [True,'Two', (3,4), 6, [6,7]]

# 방법 2. range()를 통해 정수배열을 생성
myList = list(range(4))
print(myList) # [0,1,2,3]

# 방법 3. 문자열의 각 문자를 요소로 하는 배열 생성
myList = list('Hello')
print(myList) # ['H','e','l','l','o']

# 방법 4. 딕셔너리 타입의 키 -> 리스트
myDict = {1:'Kiwi', 2:'Melon', 3:'Apple'}
myList = list(myDict.keys())
print(myList) # [1,2,3]

# 방법 5. 딕셔너리 타입의 값 -> 리스트
myList = list(myDict.values())
print(myList) # ['kiwi', 'Melon', 'Apple']

4. 2차원 배열(리스트) 생성

2차원 배열을 생성하는 방법은 [ ] 괄호 안에 [ ] 괄호와 값을 넣어주면 생성됩니다. 추가로, list() 함수 안에 리스트 객체를 넣어 2차원 배열을 생성할 수 있습니다.

# 방법 1. [ [][] ] 괄호 안에 괄호!
myList = [[1,2],[3,4],[5,6]]
print(myList) # [[1,2],[3,4],[5,6]]

# 방법 2. list() 함수 안에 [ ] 괄호 추가
myList = [1,2,3,4,5]
myList = list([myList])
print(myList) # [[1,2,3,4,5]]