프로그래밍

파이썬 배열(Array) - 파이썬 배우기(Python)

야라바 2024. 5. 10. 09:28
728x90

 

파이썬의 배열은 여러 원소를 하나의 묶음으로 관리하고 각 원소 간에는 순서(order)가 존재하여 인덱스(Index)를 통해 접근하는 리스트로 파이썬에서는 리스트(list)와 튜플(tuple)이라는 두 가지 타입이 있습니다. 통상 프로그래밍 언어에서 배열은 동일한 데이터 타입의 원소들로 구성되지만 파이썬에서는 각 원소의 데이터 타입이 동일하지 않아도 되고 심지어 다른 배열을 원소로 갖는 것도 허용됩니다. 배열간의 비교는 동일 인덱스끼리 각각 비교해 가는 방식으로 적용됩니다.

 

 

■ 리스트(list)와 튜플(tuple)

 

리스트(list)는 [1, 2, 3] 형태로 정의하며 각 원소를 수정할 수 있는 특성을 갖습니다. []는 빈 list를 의미합니다.

 

>>> b = [1,"aa",3,4,5]

>>> type (b)

<type 'list'>

 

튜플(tuple)은 (1, 2, 3) 형태로 정의하며 한번 정의한 원소를 수정할 수 없는 특성이 있습니다. 튜플 원소에 대한 수정 작업은 "TypeError: 'tuple' object does not support item assignment" 같은 오류를 발생시킵니다. 원소의 추가 및 삭제도 할 수 없습니다. ()는 빈 tuple을 의미한다. 주의할 점은 원소가 하나만 있는 tuple은 일반적인 괄호와 구분이 되지 않기 때문에 ('A',)와 같이 기술하면 tuple임을 명시할 수 있습니다. 원소를 교체하거나 추가하는 등의 작업은 새로운 튜플을 생성하는 방법으로만 가능합니다. 아래의 예에서는 첫 원소를 대문자 'A'바꾼 새로운 배열로 교체했습니다.

 

>>> b = ( 1, "aa", [3, 4, 5], 6, 7)

>>> type (b)

<type 'tuple'>

>>> t = ('a', 'b', 'c', 'd', 'e')

>>> t = ('A',) + t[1:]

>>> t

 

('A', 'b', 'c', 'd', 'e')

 

 

배열 내부에 또 다른 배열을 갖는 경우 해당 원소에 대한 접근은 b[2][0]같은 방식으로 인덱스를 지정 합니다. 파이썬에서 배열의 인덱스는 0부터 시작합니다. 배열 내부에 이미 정의한 다른 배열 변수를 포함시키면 포함된 배열을 참조하는 형태로 관리되어 포함된 배열을 수정하면 포함한 상위 배열도 같은 내용을 보게 됩니다. 아래 예제를 보면 a 배열이 b 배열을 포함했는데, b[2][0]을 'test'로 변경했을때 a배열에도 동일한 내용이 반영되는 것을 확인할 수 있습니다.

 

>>> print b

(1, 'aa', [3, 4, 5], 6, 7)

>>> print b[2]

[3, 4, 5]

>>> print b[2][0]

>>> a = [3, b, 'aaa']

>>> print a

[3, (1, 'aa', [3, 4, 5], 6, 7), 'aaa']

>>> b[2][0] = 'test'

>>> print a

 

[3, (1, 'aa', ['test', 4, 5], 6, 7), 'aaa']

 

 

 

■ 배열 연산자

 

아래는 배열과 연관된 연산자들입니다. 주의할 것은 배열 자체에 연산을 수행하고 리턴값이 없는 함수들이 있는데 이 함수들의 타입은 None 타입입니다.

 

    • A.append(obj)
      배열 맨뒤 원소로 obj를 추가합니다. 
    • A + B
      배열 A와 B를 연결하여 새로운 배열을 리턴합니다. 단 A와 B가 동일한 list 또는 tuple 타입이어야 합니다. list 타입과 tuple 타입을 연결할 수는 없습니다.  += 연산자도 사용할 수 있습니다.
    • A * i
      배열 A를 i회 반복하여 새로운 배열을 리턴 합니다. *= 연산자도 사용할 수 있습니다.
    • A.extend(list)
      list로 입력한 리스트를 배열 맨뒤에 붙입니다. 파라미터는 리스트만 허용.
    • A.insert(index,obj)
      index로 지정한 위치에 새로운 원소로 obj를 삽입하고 나머지는 우측으로 이동시킵니다.
    • del A[index]
      index로 지정한 위치의 원소를 제거하고 나머지를 좌측으로 이동시킵니다. del A[i:j]와 같이 범위를 지정해서 삭제할 수도 있습니다.
    • A.pop(index)
      index로 지정한 위치의 원소를 삭제하며 리턴하고 나머지를 좌측으로 이동시킵니다.
    • A.remove(obj)
      배열에서 obj로 지정한 내용과 동일한 첫 항목을 찾아 삭제하고 나머지를 좌측으로 이동시킵니다. 
>>> a
[1, 2, 3, 4, 9, 8, 7]
>>> print a.pop(3)
4
>>> a
[1, 2, 3, 9, 8, 7]
>>> a.remove(9)
>>> a
[1, 2, 3, 8, 7]

 

    • A.reverse()
      배열의 순서를 뒤집습니다. A = A[::-1]과 동일한 효과. 
    • A.sort()
      배열을 오름차순으로 정렬합니다. 내림차순 정렬은 
      t.sort(reverse=True) 로 수행합니다. 
    • A.index(obj)
      배열에서 obj로 지정한 내용과 동일한 첫 항목을 찾아 그 인덱스를 리턴합니다. 찾지 못하면 오류 출력.
    • A.count(obj)
      배열에서 obj로 지정한 내용과 동일한 항목을 찾아 그 개수를 리턴 합니다.
    • len(A)
      배열의 항목 개수 리턴
    • range(i, j)
      i 부터 j 까지(j는 제외)의 정수 등을 list 타입으로 리턴 합니다. range(j)는 range(0, j)의 의미로 사용합니다. range(i,j,k) 형태로도 사용할 수 있습니다.
    • A[i:j:k]
      배열의 i 위치 부터 j위치까지(j위치는 제외. 직전 위치의 항목까지만) k만큼씩 움직이며 각 원소를 추출하여 새로운 배열을 리턴 합니다. k가 음수면 역방향 진행을 의미 합니다. i를 생략하면 맨앞이란 의미이고, j를 생략하면 i의 반대편 맨끝을 의미하고 k를 생략하면 1을 의미 합니다. 스트링에 대한 처리와 유사 합니다.
    • ''.join(A)
      배열 A의 모든 원소를 하나의 스트링으로 합쳐서 리턴합니다. 단, 배열의 모든 원소가 스트링일때만 가능하고 다른 타입이 섞여있으면 오류를 발생시킵니다. join 앞에 널 스트링이 아닌 값을 지정하면 해당 스트링으로 각 항목들을 붙인다. join 앞의 스트링이 연결자 역할을 합니다.
>>> a = ('a','b','c')
>>> ''.join(a)
'abc'
>>> '=='.join(a)
'a==b==c'

 

    • a.split('sep')
      스트링 a를 sep 기준으로 분리한 리스트를 리턴합니다. 'sep'를 생략하면 White space를 제외한 단어들만으로 리스트를 생성 합니다.
    • list(a), tuple(a)
      스트링 a에 있는 모든 문자를 각각 분리한 list 또는 tuple을 리턴합니다. list(), tuple()는 빈 배열 리턴.
    • obj in A
      obj로 지정한 항목이 배열에 존재하면 True를 리턴 합니다.
    • sum(A)
      배열 A의 모든 항목을 더한 결과를 리턴 합니다. 단, 모든 항목이 숫자 항목이어야 합니다.
    • max(A), min(A)
      배열중에서 가장 큰, 가장 작은 항목을 리턴 합니다.
    • all(A)
      배열내 모든 원소가 True이면 True 리턴
    • any(A)
      배열 A가 빈 배열이 아니면 True
    • divmod(a, b)
      a를 b로 나눈 몫과 나머지로 구성된 tuple을 리턴 합니다.
>>> print (divmod(10,3))
(3, 1)
>>> type(divmod(10,3))
<class 'tuple'>

 

    • zip(A, B,...)
      인수로 지정된 배열 또는 스트링(문자가 개별 항목으로 취급됨)의 각 원소들을 원소개수가 가장 작은 것을 기준으로 동일 인덱스로 묶어 새로운 배열을 리턴 합니다.
>>> a = list(zip([1,2,3],('a','b','c'),['qqq','rrr'],"222222"))
>>> a
[(1, 'a', 'qqq', '2'), (2, 'b', 'rrr', '2')]

 

 

 

 

728x90