Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 나이브베이즈
- 순회 크롤러
- control statement
- sklearn
- ML
- dataframe
- 파이썬 제어문
- Machine Learning
- Data pre-processing
- pandas
- 파이썬 크롤러
- 머신러닝
- 파이썬 객체 지향 프로그래밍
- python
- NumPy
- Titanic data set
- python control statement
- 사이킷런
- 배열
- K평균군집화
- scikit-learn
- Naive Bayes
- 파이썬
- Python crawler
- 판다스
- KMeans Clustering
- 제어문
- 넘파이
- 타이타닉 데이터
- 파이썬 크롤링
Archives
- Today
- Total
Try to 개발자 EthanJ의 성장 로그
Python Data type (list) 파이썬 자료형(리스트) 본문
CS & DS/Basic Python with Data Crawling
Python Data type (list) 파이썬 자료형(리스트)
EthanJ 2022. 10. 8. 17:22Python Data type 파이썬 자료형
4) 리스트(List)
- 여러 개의 아이템들을 저장하는 객체 = 여러 개의 값(다양한 data type)을 저장하는 그릇
- 문법 기호 : [아이템1, 아이템2, 아이템3 .... ]
- 용어 : 아이템 = 요소
- 아이템으로 가질 수 있는 데이터 타입 : 문자, 숫자, 리스트, 딕셔너리 ...
- 종류
- 아이템이 없는 리스트
- 1차원 리스트
- 다차원 리스트
- 특징
- 인덱스 활용
- 다차원 리스트의 구조에 대한 이해
1. 생성하기
# 아이템이 없는 리스트 == 빈 리스트 생성하기
# 문법 : []
# 함수 : list()
a = []
a2 = list()
print(type(a), type(a2))
print(a, a2)
<class 'list'> <class 'list'>
[] []
# 모든 데이터 타입을 아이템으로 가질 수 있다.
a3 = ['a', 10, 1.1, [1, 23.1, 'a']]
a3
['a', 10, 1.1, [1, 23.1, 'a']]
#리스트가 하나의 요소로 들어감
a3[3]
[1, 23.1, 'a']
# n차원 리스트 > 인덱스 n번 해야 출력 가능, 리스트 속의 리스트가 몇 개니?
# 2차원 리스트 > 인덱스 2번 해야 출력가능
# 2차원 데이터 > 마치 좌표처럼 데이터를 지목해 출력 가능
a3 = ['a', 10, 1.1, [1, 23.1, 'a']]
print(a3[3][2])
a
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
2. 인덱싱, 슬라이싱
- 리스트를 인덱스 번호로 접근하면 해당 위치의 값(item)을 가져온다
- 복습
- 첫 번째 인덱스 번호 == 0
- 마지막 인덱스 번호 == -1
인덱싱(indexing)
- 특정 위치에 있는 하나의 아이템에 접근 > "하나"의 item
#리스트 생성하기
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
#첫 번째 아이템 인덱스 번호: 0
#인덱싱 문법 : 객체[인덱스 번호]
a[0]
1
#리스트에서 아이템 6 가져오기
a[5]
6
#리스트의 마지막 값 확인하기
print(a[8])
print(a[-1])
print(a[len(a)-1])
9
9
9
#len()은 인덱스 번호를 가지는 모든 자료의 길이를 세어준다.
len(a)
9
슬라이싱(slicing)
- 정의 복습 : 연속된 법위에 있는 하나 혹은 하나 이상의 여러 개 아이템에 접근한다
- 문법 : 리스트[시작 index : 끝 index : (:간격)] > (끝 index -1)까지만 접근
# 리스트의 0~2번째 아이템까지 확인하기
# 시작 index : 0
# 끝 index : 3 (3 - 1 = 2)까지 접근
a[0:3]
[1, 2, 3]
# 리스트의 3번째~끝까지 아이템 확인하기
# 시작 index == 2
# 끝 index == null (개념상 len(list))
print(a[2:])
print(a[2:len(a)])
[3, 4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7, 8, 9]
3. 아이템 추가하기 : 연산자와 함수를 이용한 리스트 아이템 추가
- 산술연산자 : +, *
- 리스트의 함수(method) : list.append(item), list.extend(item), list.insert(index, item)
산술연산자
- 종류 : +, *
- 특징 : return value (!= None) > 원본 반영X
#리스트끼리 연결 : +
a = [1, 2, 3]
b = [4, 5, 6]
a + b
[1, 2, 3, 4, 5, 6]
- enumerate는 리스트가 있는 경우 순서와 리스트의 값을 전달하는 기능을 합니다.
4. 리스트 타입의 함수 (methods of list)
- 종류
- list.append(item) : parameter value를 통째로 list last item으로 추가 > 1개의 아이템만 추가 가능
- list.extend(param) : param의 item을 뽑아서 list last item으로 추가 > 여러 개의 item 추가 가능
- list.insert(index, item) : index 지정 item 삽입, item 통째로 추가
- 참고 연산자 : in 연산자 > 결과값 bool type
# 리스트 생성
a = [1, 2, 3]
a
[1, 2, 3]
# list.append(item)
# 문법 : [대상 list].append([추가할 item])
a.append(4)
a
[1, 2, 3, 4]
# 추가할 item == list라면?
a.append([5, 6])
print(a)
print(a[4])
[1, 2, 3, 4, [5, 6]]
[5, 6]
# list.extend(data)
# 문법 : [대상 list].extend(data)
# append(item) vs. extend(data) : extend(data) > item을 가진 data type만 parameter로 받을 수 있다
# > parameter data의 item을 개별적으로 받아서 caller list에 대입
# extend(data) : parameter data의 item 개수만큼 index 연장 vs. append(item) : index += 1
print(a)
a.extend([7, 8, 9])
print(a)
a.extend({'a':97, 'b':98, 'c':99})
print(a)
[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6], 7, 8, 9]
[1, 2, 3, 4, [5, 6], 7, 8, 9, 'a', 'b', 'c']
# extend(data) > 하나의 item만 넣어도 무조건 item가진 data(e.g. list)로 call 해야 함
a.extend([10])
print(a)
[1, 2, 3, 4, [5, 6], 7, 8, 9, 'a', 'b', 'c', 10]
# insert(index, item)
# 문법 : [대상 list].insert([index], [추가할 item])
# item 추가가 지정 index에 실행됨
# vs. append(item) : 둘 다 하나의 index 번호에 모든 data를 추가
a.insert(0, 100)
print(a)
[100, 1, 2, 3, 4, [5, 6], 7, 8, 9, 'a', 'b', 'c', 10]
# list.insert(item) > list item 교체 X, 추가 O > 실제로 소실되는 자료는 없음 > 내부적으로 (index += 1) 발생
a.insert(0, [99, 98])
a
[[99, 98], 100, 1, 2, 3, 4, [5, 6], 7, 8, 9, 10]
# in 연산자 > 특정 item이 list 내에 있는지 여부 출력
# 문법 : [item] in [list]
print(4 in a)
print(5 in a)
print(5 in a[6])
True
False
True
# not in 연산자 > 특정 item이 list 내에 없는지 여부 출력
# 문법 : [item] not in [list]
print(10 not in a)
False
> 연습문제
# 1) 빈 리스트 생성
list1 = []
# (list1 = []) == (list1 = list())
# 2) 1)번 리스트에 숫자 1, 2, 3을 아이템으로 추가
list1.extend([1, 2, 3])
# 3) 2)번 리스트의 2번째 index에 문자 100을 item으로 추가
list1.insert(2, "100")
# 4) 3)번 리스트의 마지막에 문자 A, B를 아이템으로 가진 list를 item으로 추가
list1.append(['A', 'B'])
# 5) 4)번 리스트의 아이템을 2번 반복해서 가지는 리스트를 출력
print(list1 * 2)
[1, 2, '100', 3, ['A', 'B'], 1, 2, '100', 3, ['A', 'B']]
5. 아이템 수정하기
- indexing, slicing을 이용해서 item을 수정할 수 있다.
# 리스트 a 생성
a = list()
a = [1, 2, 3, 4, 5]
a
[1, 2, 3, 4, 5]
# 0번 index의 item을 [10, 20]으로 수정 > indexing
a[0] = [10, 20]
a
[[10, 20], 2, 3, 4, 5]
# 연속된 범위에 있는 여러개의 item 수정 > slicing
a2 = [1, 2, 3, 4, 5]
print(a2)
a2[:2] = [10, 20]
print(a2)
[1, 2, 3, 4, 5]
[10, 20, 3, 4, 5]
# slicing으로 값 할당시 주의점 > 전달값 1개여도 item가진 data로 할당해야 함
# > 동작원리가 list.extend(data)와 동일
a2[0:1] = [100]
a2
# indexing == append()
# slicing == extend()
[100, 20, 3, 4, 5]
> 연습문제
아래 조건에 맞추어 리스트를 수정하세요.
[ 10, 99, 3, '사과', 73, '바나나' ]
조건1) '사과'를 'apple'로 수정
조건2) 99, 3 을 9, 33으로 수정
조건3) 73 을 [ 73, 74 ] 로 수정
list_test = [10, 99, 3, '사과', 73, '바나나']
# 조건1)
list_test[3] = 'apple'
# 조건 2)
list_test[1:3] = [9, 33]
# 조건 3)
list_test[4] = [73, 74]
print(list_test)
[10, 9, 33, 'apple', [73, 74], '바나나']
6. item 삭제하기
- slicing + empty list
- del 키워드 + indexing or slicing
- list.remove(item) > 값을 기준으로 삭제
- list.pop() > parameter에 아무것도 입력하지 않거나, -1 입력시 > 마지막 index item 삭제
- list.pop(index) > 특정 index 지정해서 item 삭제도 가능
# 리스트 생성
a1 = [10, 20, 30, 40, 50]
a2 = [10, 20, 30, 40, 50]
# 하나의 item 삭제 > (1) slicing + empty list
# index 0 item 삭제
a1[:1] = []
print(a1)
[20, 30, 40, 50]
# if indexing + empty list 대입 > empty list 그대로 들어감!!
a2[0] = []
print(a2)
# indexing만으로는 item 삭제 불가능!
[[], 20, 30, 40, 50]
# 하나의 item 삭제 > (2) del 키워드 + indexing
del a1[-1]
print(a1)
[20, 30, 40]
# indexing없이 del 키워드 + list > list 객체 자체 삭제
del a2
print(a2) # > Error
NameError: name 'a2' is not defined
# 하나의 item 삭제(3) > list.remove(item) 함수
# 문법 : list.remove(삭제할 item(!= index))
a = [1, 2, 3, 3, 3, 4, 5]
# value 5 item delete
a.remove(5)
a
[1, 2, 3, 3, 3, 4]
# 중복된 value item 존재 시 > 가장 앞선 item 하나만 삭제
a.remove(3)
a
[1, 2, 3, 3, 4]
# del 키워드 > not only 단일 item but also 연속된 범위(slicing) items 삭제도 가능
del a[2:]
a
[1, 2]
# 하나의 item 삭제 > (4) list.pop() 함수
a = [1, 2, 3, 4, 5]
a.append(6)
print(a)
# list.pop() > parameter index 미기입 > 마지막 index item 삭제 > item의 value를 확인시켜주고 삭제
# last item 삭제하는 메소드들 > 보통 삭제할 value 확인시켜주고 삭제
print(a.pop())
print(a)
[1, 2, 3, 4, 5, 6]
6
[1, 2, 3, 4, 5]
# list.pop(index) > index 지정 > 입력된 index의 item 삭제
print(a)
print(a.pop(2))
print(a)
[1, 2, 3, 4, 5]
3
[1, 2, 4, 5]
7. item 정렬
- 함수
- list.sort() : 기본동작 > 오름차순 정렬
- list.reverse() : 기존 list를 뒤집어서 정렬
# 값의 오름차순으로 정렬 : list.sort()
# 기본 동작 > sort(reverse = False) > 오름차순
# method return None > caller list 값 변경
a = [3, 4, 1, 5, 2]
print(a)
print(a.sort())
print(a)
[3, 4, 1, 5, 2]
None
[1, 2, 3, 4, 5]
# 값을 내림차순으로 정렬하는 경우 > list.sort(reverse = True)
a.sort(reverse = True)
print(a)
[5, 4, 2, 1]
# 값을 인덱스 기준으로 반대로 뒤집기 : list.reverse()
# method return None > caller changed
b = [10, 42, 34, 74, 17]
print(b.reverse())
print(b)
None
[17, 74, 34, 42, 10]
8. item 개수 세기
- 함수
- list.count(item) : item이 list 내부에 몇 개 있는지 개수 리턴
- len(list) : Python 내장 함수, list 내부 total item 개수 리턴
# 특정 item의 개수 : list.count(item)
a = [1, 2, 3, 3, 4, 5, 6]
print(a.count(6))
b = ['a', "abc", 5, 6, "a", a]
print(b.count('a'))
1
2
# list의 total item 개수 : len(list)
len(a)
7
9. 리스트 복사하기
- 할당 기호(=) > shallow copy
- list.copy() > deep copy
- list(data) > deep copy
- slicing + 할당 > deep copy
# 1. 할당기호(=)로 복사하기 > shallow copy
a = [1, 2, 3, 4, 5]
b = a
# 할당기호(=)로 복사 > 주소값 복사 > shallow copy
print(a, b)
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
# 변수가 가리키는 주소 출력 함수 : id(variable)
print(id(a), id(b))
1776272363776 1776272363776
# = 을 이용해 복사한 결과 > shallow copy
a[0] = 10
print(a, b)
[10, 2, 3, 4, 5] [10, 2, 3, 4, 5]
# 2. list.copy() method로 복사하기 > deep copy
c = a.copy()
print(id(a), id(c))
# 다른 주소 가리킴
1776272363776 1776255285504
# deep copy > a를 변경해도 c는 영향받지 않는다
a[1] = 20
print(a, b, c)
[10, 20, 3, 4, 5] [10, 20, 3, 4, 5] [10, 2, 3, 4, 5]
# 3. list(data) 함수로 복사 > deep copy
# list(data) > 해당 data를 새로 할당해 list로 만든다
d = list(c)
print(id(d), id(c))
1776272453952 1776255285504
# deep copy > c를 변경해도 d는 영향받지 않는다
c[2] = 30
print(c, d)
[10, 2, 30, 4, 5] [10, 2, 3, 4, 5]
# 4. slicing으로 (전체) 범위 지정해 할당 > deep copy
e = d[:]
print(id(e), id(d))
1776272393920 1776272453952
# deep copy > d를 변경해도 e는 영향받지 않는다
d[3] = 40
print(d, e)
[10, 2, 3, 40, 5] [10, 2, 3, 4, 5]
> 연습문제
1. a 리스트를 이용하여 다음과 같은 문자열을 출력하시오.
a = ['Life', 'is', 'too', 'short', 'you', 'need', 'python']
출력문 : you too
a = ['Life', 'is', 'too', 'short', 'you', 'need', 'python']
print(a[4], a[2])
you too
2. a 리스트의 길이를 구하시오
length = len(a)
print(length)
7
3. a 리스트의 첫번째 아이템에 길이를 추가하세요.
a.insert(0, len(a))
print(a)
[7, 'Life', 'is', 'too', 'short', 'you', 'need', 'python']
4. 아래와 같이 정렬되지 않은 리스트를 만들고 내림차순 정렬로 바꿔보세요.
[1, 4, 9, 2, 6, 10]
list_sort = [1, 4, 9, 2, 6, 10]
list_sort.sort(reverse = True)
print(list_sort)
[10, 9, 6, 4, 2, 1]
'CS & DS > Basic Python with Data Crawling' 카테고리의 다른 글
Python Data type (dictionary) 파이썬 자료형 (딕셔너리) (1) | 2022.10.08 |
---|---|
Python Data type (tuple) 파이썬 자료형 (튜플) (1) | 2022.10.08 |
Python Data type (string) 파이썬 자료형 (문자열) (1) | 2022.10.06 |
Python Baekjoon Online Judge 파이썬 백준 온라인 저지 용어 및 입출력 코드 (0) | 2022.10.06 |
Python Operator 파이썬 연산자 (1) | 2022.10.06 |
Comments