< 공부한 내용 >
1. List
2. Tuple
3. Set
4. Dict
1. List
'''
list 특징
- 1차원 배열구조(vector)
- 형식) 변수 = [값1, 값2, ..., 값3]
- 다양한 자료형 저장 가능
- 순서를 보장
-> index 사용 : 0부터 시작
- 수정, 추가, 삽입, 삭제
'''
# 1. 단일 list
lst = [1,2,3,4,5]
print(len(lst)) # 5
for i in lst :
# print(i, end=' ') # 1 2 3 4 5
# print(lst[ i-1: ]) # [ start : end ] (0번째 인덱스 ~ 4번째 인덱스에서 시작)
print(lst[ : i ])
# index 사용
x = list(range(1, 101))
print(x) # 전체 원소 출력
# index 형식 : 변수[n]
print(x[:5]) # [1, 2, 3, 4, 5] (인덱스 0~4까지 출력, 앞에서 5개 출력)
print(x[-5:]) # [96, 97, 98, 99, 100] (끝에서 5개 출력)
'''
변수[:n]
변수[n:]
변수[start:stop:step] # step 생략시 1씩 증가
'''
print(x[:10:2]) # [1, 3, 5, 7, 9]
print(x[:]) # 전체
print(x[::2]) # 홀수 위치
# 2. 중첩 list
'''
[ [ ], [ ] ]
'''
a = ['a', 'b', 'c'] # 단일 list
b = [10, 20, a, True, "문자열"] # 중첩 list ( a = ['a', 'b', 'c'] )
print(b)
print(b[2]) # ['a', 'b', 'c']
print(b[2][1]) # b
print(b[2][1:]) # ['b', 'c'] - 단일변수가 아닐 경우, list로 묶여서 출력됨
print(type(a),type(b)) # <class 'list'> <class 'list'>
# 3. 수정, 추가, 삽입, 삭제
num = ['one', 'two', 'three', 'four']
print(len(num)) # 4
print(type(num)) # <class 'list'>
# 원소 추가 : 함수 이용
# object.member
num.append('five')
print(num) # ['one', 'two', 'three', 'four', 'five']
# 원소 삭제 : 함수 이용
num.remove('five')
print(num) # ['one', 'two', 'three', 'four']
# 원소 수정 : index 이용
num[2] = 3
print(num) # ['one', 'two', 3, 'four']
# 원소 삽입 : 함수 이용
num.insert(0, 'zero') # 0번 인덱스 자리에 끼워넣겠다.
print(num) # ['zero', 'one', 'two', 3, 'four']
# 4. list 연산
# 1) list 결합
x = [1,2,3,4]
y = [1.5, 2.5]
z = x + y
print('z=', z) # z= [1, 2, 3, 4, 1.5, 2.5]
# 2) list 확장
x.extend(y) # old object, 기존에 있던 객체를 확장하는 것! vs 결합은 새로운 객체를 만드는 것!
# extend에는 iterable(연속된 변수, 2개 이상의 변수) 입력해야함
print('x=', x) # x= [1, 2, 3, 4, 1.5, 2.5]
# 3) list 추가
x.append(y)
print('x=', x) # x= [1, 2, 3, 4, 1.5, 2.5, [1.5, 2.5]]
# 4) list 곱셈
# x = [1, 2, 3, 4] * 2
result = x * 2 # x의 원소 2배 확장
print(result) # [1, 2, 3, 4, 1, 2, 3, 4]
# x = [1, 2, 3, 4] * 0.5
# 각 변량에 0.5를 곱하려면 for문을 이용해야함
for i in x :
print(i * 0.5, end=' ') # 0.5 1.0 1.5 2.0
# 5. list 정렬
import random
r = [] # 빈 list
for i in range(5) :
r.append(random.random()) # 0~1 난수 실수
print('r=', r)
r.sort() # 오름차순 # default
print(r)
r.sort(reverse=True) # 내림차순
print(r)
# 6. list에서 원소 찾기
r2 = [] # 빈 list
for i in range(10) :
r2.append(random.randint(1,5)) # 1~5 사이 난수 정수
print(r2) # [2, 4, 5, 4, 2, 4, 3, 5, 2, 5]
if 4 in r2 :
print("찾는 값 4가 있음")
else :
print("찾는 값 없음")
# 7. list 내포
'''
list 내포 ( list 내 for)
- list 안에 for문 포함
- 형식1) 변수 = [ 실행문 for 변수 in 열거형객체 ]
실행순서 : 1. for문 > 2. 실행문 > 3. 변수 할당
- 형식2) 변수 = [ 실행문 for 변수 in 열거형객체 if 조건식 ]
실행순서 : 1. for문 > 2. if 조건식 > [3.실행문 > 4. 변수 할당]
'''
x = [2, 4, 1, 5, 3]
# x의 각 변량에 제곱 적용 : x ** 2
# x ** 2 # Error
result = [ i ** 2 for i in x ]
print(result) # [4, 16, 1, 25, 9]
# for + list
result = []
for i in x :
calc = i **2
result.append(calc)
print(result) # [4, 16, 1, 25, 9]
# list 내포 형식2
# 1~100 사이 3의 배수 추출
num = list(range(1,101))
print(num)
result2 = [i for i in num if i%3 == 0]
print(result2)
2. Tuple
'''
tuple 특징
- list와 공통점 : 순서 보장, index 사용
- list와 차이점 : 읽기전용(read only)
- 형식) 변수 = (값1, 값2, ..., 값n)
- list에 비해서 처리속도 빠름
'''
# 1. tuple 생성
t = (1,2,3,4,5)
print(type(t)) # <class 'tuple'>
print(len(t)) # 5
print(max(t)) # 5
print(min(t)) # 1
# 2. tuple 수정(삽입, 추가, 삭제) 불가
print(t[0]) # 1
print(t[-1]) # 5
print(t[2:5]) # (3, 4, 5)
# t[0] = 'zero' # 수정 불가 - error
# 3. tuple 수정 -> list 변환
lst = list(t) # tuple -> list
print(lst) # [1, 2, 3, 4, 5]
lst.remove(3)
t2 = tuple(lst) # list -> tuplet
print(t2) # (1, 2, 4, 5) # 소괄호로 묶여있으면 tuple
3. Set
'''
set 특징
- 집합의 개념
- 형식) 변수 = {값1, 값2, 값3, ..., 값n}
- 순서 없음(index 사용 불가)
- 중복 불가
'''
# 1. set 생성
s = {1, 3, 5, 3} # 3은 이미 있어서 1번만 저장
print(s) # {1, 3, 5}
print(len(s)) # 3
# 2. for + set
for i in s :
print(i, end=' ') # 1 3 5
# 순서가 있어보이지만... 데이터 양이 많으면 데이터 순서 없이 꺼내진다는 것 확인 가능
lst = list(range(1,101))
s2 = set(lst)
print(s2)
for i in s2 :
print(i, end=' ')
print(s2[0]) # TypeError
# 3. 집합의 개념
s = {1, 3, 5}
s2 = {3, 7}
print(s.union(s2)) # 합집합 : {1, 3, 5, 7}
print(s.difference(s2)) # 차집합 : {1, 5}
print(s.intersection(s2)) # 교집합 : {3}
# 4. 중복 데이터 제거
gender = ['남', '여', '여', '남'] # list
sgender = set(gender) # list -> set
print(sgender) # {'여', '남'} - 순서 없음
lgender = list(sgender)
print(lgender) # ['여', '남'] - 순서 있음
print(lgender[0]) # 여
# 5. 원소 추가, 삭제
s3 = {1, 3, 5}
s3.add(7) # {1, 3, 5, 7}
print(s3)
s3.remove(3)
print(s3) # {1, 5, 7}
4. Dict
'''
dict 특징
- set과 유사함 : 순서 없음
- 형식) 변수 = {키1:값1, 키2:값2, 키3:값3, ... , 키n:값n}
- key는 중복불가, value는 중복가능
- key를 이용해서 value 참조
변수[key2]
- 찾는 속도가 빠름 : 직접 접근 방식
'''
# 1. dict 생성
# 1) dict() 이용
dic1 = dict(key1 = 100, key2 = 300, key3 = 400)
print(dic1) # {'key1': 100, 'key2': 300, 'key3': 400}
print(len(dic1)) # 3
dic1['key2'] # 300
# 2) {} 기호 이용
dic2 = {'name' : '홍길동', 'age':35, 'addr' : '서울시'}
print(dic2)
print(type(dic2)) # <class 'dict'>
# 나이 추출
age = dic2['age'] # 35
age2 = dic2.get('age') # 35
# 2. 키(key) 유무 검사하기
print('age' in dic2) # True
# 3. 원소 수정, 삭제, 추가
dic2['age'] = 45
print(dic2)
print(len(dic2)) # 3
dic2['gender'] = "남자"
print(dic2) # {'name': '홍길동', 'age': 45, 'addr': '서울시', 'gender': '남자'}
del dic2['gender']
print(dic2) # {'name': '홍길동', 'age': 45, 'addr': '서울시'}
# 4. for + dict
# 1) for k in dic2.keys() :
for k in dic2.keys() : # dict_keys(['name', 'age', 'addr'])
print(k, "->", dic2[k])
# name -> 홍길동
# age -> 45
# addr -> 서울시
# 2) for v in dic2.values() :
for v in dic2.values() :
print(v)
# 홍길동
# 45
# 서울시
# 3) key + value
for i in dic2.items() :
print(i)
# ('name', '홍길동')
# ('age', 45)
# ('addr', '서울시')
for k, v in dic2.items() :
print(k, v)
# name 홍길동
# age 45
# addr 서울시
# 5. 단어 빈도수 구하기
word_vec = ["love", "word", "love", "cat", "word"]
print(len(word_vec)) # 5
wc = {} # 빈 set : word count
for word in word_vec :
wc[word] = wc.get(word, 0) + 1
# get(0) : 해당 key의 value값 호출
# wc.get(word, 0) : 키 word의 값을 가져오는데, 값이 없다면 0
print(wc) # {'love': 2, 'word': 2, 'cat': 1}
wc2 = {} # 빈 set
for word in word_vec :
if word in wc2 : # 넘어온 값이 기존에 wc2에 있다면
wc2[word] += 1
else : # 최초 단어 발견
wc2[word] = 1
print(wc2) # {'love': 2, 'word': 2, 'cat': 1}
# list : [ ], tuple : ( ), set : { }, dict : { key : value }
--------------------------------------------------- example ---------------------------------------------------
'Python 과 머신러닝 > I. 기초 문법' 카테고리의 다른 글
Python 기초 5장. 함수 (2) (0) | 2019.09.30 |
---|---|
Python 기초 5장. 함수 (1) (0) | 2019.09.30 |
Python 기초 4장. 정규표현식 (0) | 2019.09.30 |
Python 기초 2장. 제어문 (0) | 2019.09.30 |
Python 기초 1장. 변수와 연산자, print, 문자열처리 (0) | 2019.09.30 |
댓글