프로그래밍 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