프로그래밍 Programming

파이썬 자료구조 - 리스트 list

문장전달자 2020. 9. 11. 23:57
728x90

데이터타입 - 부울, 정수, 부동소수점수, 문자열
자료구조 - 데이터타입의 결합

 

리스트와 튜플

대부분의 프로그래밍 언어는 항목의 정수 위치로 시퀀스의 항목을 나타낸다.

 

  • 리스트는 모든 것의 시퀀스다.

파이썬에는 2가지 시퀀스 구조가 존재한다. 0 혹은 그 이상의 항목이 포함되어 있으며, 이들 항목은 다른 타입이 될 수 있다.

  • 튜플tuple - 불변immutable 한다. 항목을 할당하고 바꿀 수 없다.
  • 리스트list - 변경가능mutable 하다. 항목을 할당하고 자유롭게 수정하거나 삭제가 가능하다.

 

리스트

  • 순차적 파악
  • 리스트는 모든 것의 시퀀스다.
  • 변경 가능
  • 동일한 값 여러번 반복 가능

 

생성하기

  • [ ] 또는 list()
  • 0개 이상의 요소로 만들어짐
  • 콤마 ( , )로 구분 
  • 대괄호 ( [] )로 둘러쌈
  • 동일한 값 여러번 반복 가능

 

변환하기

  • list() - 다른 데이터 타입을 리스트로 변환
  • split() - 문자열을 구분자로 나누어서 리스트로 변환
>>> list('dog')
['d', 'o', 'g']
>>> today = '9/9/2020'
>>> today.split('/')
['9', '9', '2020']
>>> z = 'a//b'
>>> z.split('/')
['a', '', 'b']
>>>
>>> zz = 'a///b'
>>> zz.split('/')
['a', '', '', 'b']

위의 예제가 잘 이해가 가지 않는다면, 아래 예제부터 보자.

/ 기준으로 앞 뒤 2개의 빈 문자열

>>> x = '/'
>>> x.split('/')
['', '']

● / ● / 즉, 이상 3개의 빈 문자열

>>> xx = '//'
>>> xx.split('/')
['', '', '']

 

offset으로 항목얻기

  • 오프셋으로 리스트에서 하나의 특정 값 추출가능
  • 음수의 인덱스는 끝에서 거꾸로 값을 추출
  • 오프셋의 위치가 리스트 범위를 벗어나는 경우 IndexError 반환
>>> weekdays = ['Mon','Tue','Wed','Thu','Fri']
>>> weekdays[0]
'Mon'
>>> weekdays[-1]
'Fri'
>>> weekdays = ['Mon','Tue','Wed','Thu','Fri']
>>> weekdays[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

 

리스트의 리스트

  • 리스트의 리스트에서는 여러 개의 인덱스 사용가능
  • all_birds[0][1]

 

offset으로 항목 바꾸기

  • 리스트는 가변이므로 유효한 위치에서 값을 얻어 변경할 수 있다.
>>> weekdays[1] = 'Tuesday'
>>> weekdays
['Mon', 'Tuesday', 'Wed', 'Thu', 'Fri']

 

슬라이스로 항목 추출하기

  • 리스트의 서브시퀀스 추출
>>> weekdays[0:2]
['Mon', 'Tuesday']

 

리스트 항목추가

  • append() - 리스트의 끝에 항목추가
  • insert() - 원하는 위치에 항목추가. 리스트의 끝을 넘는 오프셋은 끝에 항목추가 
>>> weekdays.append('Sat')
>>> weekdays
['Mon', 'Tuesday', 'Wed', 'Thu', 'Fri', 'Sat']
>>> weekdays
['Mon', 'Tuesday', 'Wed', 'Thu', 'Fri', 'Sat']
>>> weekdays.insert(2, 'Days')
>>> weekdays
['Mon', 'Tuesday', 'Days', 'Wed', 'Thu', 'Fri', 'Sat']

 

리스트 항목삭제

  • del 
  • pop() - pop(0) 리스트의 헤드, 인자가 없다면 -1 사용하므로 pop() 또는 pop(-1) 은 리스트의 테일 반환 
>>> weekdays
['Mon', 'Tuesday', 'Days', 'Wed', 'Thu', 'Fri', 'Sat']
>>> del weekdays[2]
>>> weekdays
['Mon', 'Tuesday', 'Wed', 'Thu', 'Fri', 'Sat']
>>> weekdays
['Mon', 'Tuesday', 'Wed', 'Thu', 'Fri', 'Sat']
>>> weekdays.pop()
'Sat'
>>> weekdays
['Mon', 'Tuesday', 'Wed', 'Thu', 'Fri']

 

값으로 항목 offset 찾기

  • index()
>>> weekdays = ['Mon','Tue','Wed','Thu','Fri']
>>> weekdays.index('Wed')
2

 

값으로 항목 offset 찾기

  • in
>>> weekdays = ['Mon','Tue','Wed','Thu','Fri']
>>> 'Fri' in weekdays
True

 

특정 값 갯수 세기기

  • count

>>> weekdays = ['Mon','Tue','Wed','Thu','Fri']
>>> weekdays.count('Tue')
1
>>> weekdays.count('Sun')
0

 

문자열로 변환하기

  • join() 은 문자열 메소드

  • 문자열 또는 반복가능한 문자열의 시퀀스를 인자로 갖는다.

  • 리스트를 결과로 반환한다.
  • split() 의 반대

>>> weekdays = ['Mon','Tue','Wed','Thu','Fri']
>>> seperator = ' & '
>>> joined = seperator.join(weekdays)
>>> joined
'Mon & Tue & Wed & Thu & Fri'
>>>
>>> seperated = joined.split(seperator)
>>> seperated
['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
>>> seperated == weekdays
True

 

정렬하기

  • sort() 리스트 자체를 정렬

  • sorted() 정렬된 리스트 복제본 반환
  • 기본정렬방식은 오름차순, 문자열의 경우 알파벳순으로 정렬
  • 내림차순으로 하고 싶다면 인자에 reverse = True 추가
  • 혼합된 타입의 경우 파이썬이 자동으로 형변환하여 정렬

 

항목 개수 얻기

  • len() 

 

할당 및 복사

  • 할당 len()

  •  복사 copy(), list(), [ : ]

>>> x = [1,2,3]
>>> a = x.copy()
>>> a
[1, 2, 3]
>>> b = list(x)
>>> b
[1, 2, 3]
>>> c = a[ : ]
>>> c
[1, 2, 3]

a, b, c 는 x 의 복사본으로, 자신만의 값을 가진 새로운 객체. 원본 리스트의 값을 변경해도 복사본에는 영향이 없다

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

 

728x90