본문 바로가기
반응형
Programming/Python

파이썬(Python) 배열, 리스트(List)

by JAMINS 2016. 6. 29.

여러 데이터를 담기위한 자료구조로 배열(List)을 가장 많이 사용합니다. 아마도 개발하면서 가장 많이 사용하는 자료구조가 아닐까 생각되는데요. 대표적으로는 Java의 ArrayList가 있겠죠. 파이썬도 당연히 리스트를 제공합니다. 어떠한 방법으로 파이썬에서 리스트를 사용하는지 기본적인 문법과 함께 예를 들어가며 진행해보겠습니다.

squares = [1, 4, 9, 16, 25]
print(squares)

1부터 5까지의 제곱값이 담겨있는 squares 리스트를 선언하였습니다. 파이썬의 리스트는 [, ] 문자로 표기합니다. Java와 C언어의 배열에 자주 사용된 형태니 쉽게 적응할 수 있습니다.

Slicing

파이썬은 indexing을 이용해서 값을 가져올 뿐만 아니라 여러값을 쪼개서 가져올 수 있습니다.

squares = [1, 4, 9, 16, 25]
print(squares[0])        # 1
print(squares[-1])     # 25 
print(squares[-3:]) # [9, 16, 25]

-값은 역순을 의미하며 : 문자는 slice operation이라고 부르는데 리스트를 slice할 때 사용됩니다. : 를 기준으로 좌측 또는 우측에 얼만큼 잘라낼 것인지 숫자를 입력하면 됩니다.

squares = [1, 4, 9, 16, 25] 
squares[a:]     # a <= LIST < SIZE 
squares[:b]     # 0 <= LIST < b 
squares[a:b]    # a <= LIST < b

와 같은 형태로 사용할 수 있습니다.

첫 번째는 배열의 a번째 부터 끝까지 잘라낸 리스트, 두 번째는 처음부터 b번째 전(포함하지 않음) 까지 잘라낸 리스트, 세번째는 a번째 부터 b번째 전 까지 잘라낸 리스트를 의미합니다. 여기서 a, b가 음수(-) 라면 보통같은 경우는 arrayIndex 관련 오류가 나겠지만, 파이썬은 정상적으로 수행됩니다. 음수는 첫번째 또는 마지막번째 부터 역으로 이동한 값입니다. 가령, square[-1] 이면 size - 1로 계산됩니다. 따라서 25가 출력이 됩니다.

마지막 예시에서 squares[-3:]: 좌측에 숫자가 있으므로 좌측 숫자부터 잘라낸 새로운 List를 의미하는데, -3은 size - 3으로 계산되므로 2번째 부터 끝까지 잘라낸 데이터엔 [9, 16, 25]가 됩니다.

>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']

>>> # replace some values
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']

>>> # now remove them
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']

>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = []
>>> letters
[]

위의 예시로 여러가지 경우를 살펴봅니다.

 

 

Operation

리스트는 다양한 Operation을 지원합니다.

>>> squares = [1, 4, 9, 16, 25]
>>> squares + [36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

위와 같이 리스트 변수 squares에 직접 + 연산으로 리스트를 넣어 리스트를 연결시킬 수 있습니다.

Mutable Type

파이썬의 String과는 다르게 리스트는 변경 가능한 타입(mutable type) 입니다. 언제든 리스트에 담겨있는 값들을 변경할 수 있습니다.

>>> cubes = [1, 8, 27, 65, 125]
>>> cubes[3] = 64 
>>> print(cubes)
[1, 8, 27, 64, 125]

Append

뿐만 아니라 append 함수를 이용하여 리스트의 끝부분에 새로운 값들을 추가할 수 있습니다. append하니 StringBuffer가 생각나는군요.

>>> cubes.append(216)
>>> cubes.append(7 ** 3)
>>> print(cubes)
[1, 8, 27, 64, 125, 216, 343]

216과 7의 세제곱 값이 cubes 끝에 차례로 추가됩니다.

Length

리스트의 길이를 len() 함수를 통해 확인할 수 있습니다. cubes 배열의 길이를 확인하고 싶으면 len(cubes) 와 같이 입력하면 됩니다. 결과는 7이 되겠죠.

Nested

파이썬의 리스트는 중첩이 가능합니다. 새로운 리스트를 한 리스트의 요소에 포함이 가능합니다. 예를들어,

>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'

위의 예제에서 a와 n 리스트를 각각 선언하고 x라는 새로운 리스트에 각 요소로 입력합니다. 그러면 [a, n] 의 형태로 x의 값에 각각 a, n 리스트가 입력된 것을 확인할 수 있습니다. x[0]을 호출하면 당연히 a의 리스트가 불러와지고 x[0][1]은 a의 리스트의 1번째 요소니까 b가 불러와집니다. x[1][2]는 그럼 어떤 값이 출력될까요?

정리

  • 기존의 배열과 비슷하게 [, ] 로 선언
  • Slice 구문(:)으로 원하는대로 리스트를 자를 수 있음
  • +, -, * 등 리스트끼리의 연산이 가능
  • append, len 등의 함수를 이용하여 데이터 추가 및 길이 조회가 가능
  • 리스트 내부에 또 다른 리스트를 중첩할 수 있음

참고

댓글