220518 파이썬 문법7 - 리스트 함수, 튜플, set
###리스트
※numpy 라이브러리 설치하기
numpy : 배열 만들어주는 모듈... 데이터 분석할 때 필수적으로 사용함
file-settings - 좌측에서 Python Interperter - 새 라이브러리 추가하기 위해 + 누른다
- numpy 검색 - install package (원하는 버전을 설치하고 싶으면 Specify version 체크하고 고르면 됨)
import numpy as np : np라는 별칭을 부여해 numpy 라이브러리를 임포트한다
s3 = [[1,2,3],[4,5,6],[7,8,8]] # 이중 리스트
a1 = np.array(s3) # 배열로 저장
print(s3) # 결과 : [[1, 2, 3], [4, 5, 6], [7, 8, 8]]
print(a1)
# 결과
[[1 2 3]
[4 5 6]
[7 8 8]]
### 리스트 함수
# + (합침)
data1 = ['a','b','c','d','e']
data2 = ['f','g','h','i','j']
result1 = data1 + data2
result2 = data2 + data1
print('result1:', result1) # ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
print('result2:', result2) # ['f', 'g', 'h', 'i', 'j', 'a', 'b', 'c', 'd', 'e']
# * (반복)
listdata = list(range(3)) # [0, 1, 2]
result = listdata * 3 # listdata를 3번 반복한 리스트
print('result:', result) # [0, 1, 2, 0, 1, 2, 0, 1, 2]
# sum() : 리스트의 모든 원소들의 합을 구해주는 함수
list1 = [2,2,1,3,8,5,7,6,3,6,2,3,9,4,4]
list2 = list(range(1,11)) # 1 ~ 10
result1 = sum(list1) # 65
result2 = sum(list2) # 55
# len() : 리스트에 있는 모든 원소의 개수(길이)를 구해주는 함수
listdata = [2,2,1,3,8,5,7,6,3,6,2,3,9,4,4]
length = len(listdata) # 15
# append() : 리스트에 새로운 원소를 추가할 때 사용되는 함수
a = [1, 2, 3]
a.append(4) # 4 추가 : [1, 2, 3, 4]
a.append([5, 6]) # [5, 6] 추가 : [1, 2, 3, 4, [5, 6]]
# remove() : 리스트의 특정 원소를 삭제하는 함수
형식 : remove('삭제할 데이터')
a = [1, 2, 3, 1, 2, 3]
a.remove(3) # 첫번째로 나오는 3을 삭제 : [1, 2, 1, 2, 3]
a.remove(3) # (첫번째 없앴으니) 두번째로 나오는 3을 삭제 : [1, 2, 1, 2]
# del 명령 : 리스트의 특정 원소를 'index번호로' 삭제하는 명령
형식 : del 리스트[ index 번호 ]
a = [1, 2, 3]
del a[1] # 인덱스 1번 원소 삭제 : [1, 3]
b = [1, 2, 3, 4, 5]
del b[2:] # 인덱스 2번 원소부터 끝까지 삭제 : [1, 2]
del b # 리스트 b를 메모리 상에서 삭제
print(b) # NameError: name 'b' is not defined
# insert() : 리스트의 특정 위치에 원소를 삽입할때 사용되는 함수
insert( 인덱스 번호, 데이터 )
a = [1, 2, 3]
a.insert(0, 4) # # 인덱스 0번 위치에 4를 삽입 : [4, 1, 2, 3]
# index() : 리스트에서 특정 원소의 인덱스 번호를 구해주는 함수
solarsys = ['태양','수성','금성','지구','화성','목성','토성','천왕성','해왕성','지구']
planet = '지구'
pos = solarsys.index(planet) # # 가장 먼저 나오는 '지구'의 인덱스 번호 : 3
* 찾는 원소가 없는 경우에는 오류 발생
# pos = solarsys.index('명왕성')
# pop() : 리스트의 마지막 원소를 삭제하고 리턴하는 함수
pop( 인덱스 번호 ) : 인덱스 번호의 원소를 삭제하고 리턴
list = [10, 20, 30, 40, 50]
data1 = list.pop() # 마지막 원소인 50을 삭제하고 50을 data1에 리턴
print('data1:', data1) # 50
print('list:', list) # [10, 20, 30, 40] -- 50 제외한 나머지만 들어있음
data2 = list.pop(2) # 인덱스 2번 원소(30)를 삭제하고 data2에 리턴
print('data2:', data2) # 30
print('list:', list) # [10, 20, 40] -- 30 제외한 나머지만 들어있음
# reverse() : 리스트의 원소의 순서를 역순으로 바꾸어 주는 함수
형식 : 리스트.reverse()
reverse() 함수는 원본 리스트 자체를 변경한다.
listdata = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
listdata.reverse() # listdata 역순으로 변경 : [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
--> reverse 시킨 이후로는 listdata가 역정렬된 상태로 저장된다!
# sort() : 리스트에 있는 원소를 오름차순으로 정렬해주는 함수
형식 : 리스트.sort()
1 오름차순 정렬(1,2,3) : 리스트.sort()
2 내림차순 정렬(3,2,1) : 리스트.sort( reverse = True)
3 sort() 함수를 이용해서 정렬을 하면 원본 리스트가 변경된다.
namelist = ['Mary','Sams','Aimy','Tom','Michale','Bob','Kelly']
namelist.sort() # 오름차순 정렬 : ['Aimy', 'Bob', 'Kelly', 'Mary', 'Michale', 'Sams', 'Tom']
namelist.sort(reverse=True) # 내림차순 정렬 : # ['Tom', 'Sams', 'Michale', 'Mary', 'Kelly', 'Bob', 'Aimy']
# sorted() : 리스트에 있는 원소를 오름차순으로 정렬해주는 함수
형식 : sorted( 리스트 ) (sort랑 형식이 다르다!)
1 오름차순 정렬 : sorted( 리스트 )
2 내림차순 정렬 : sorted( 리스트, reverse = True )
3 sorted() 함수를 이용해서 정렬을 해도 원본 리스트가 변경되지 않는다.
result1 = sorted(namelist) # 이런 식으로 원본데이터를 변경한 것을 다른 데이터에 저장하는 방식으로 사용 (원본데이터를 건드리지 않음)
ex. [1, 3, 5, 4, 2] 라는 리스트를 [5, 4, 3, 2, 1]로 변경 하세요?
list = [1, 3, 5, 4, 2]
1. sort()
list.sort(reverse=True) # 내림차순 정렬
2. sort(), reverse()
list.sort() # 오름차순 정렬
list.reverse() # 역순으로 정렬
3. sorted()
list2 = sorted(list, reverse=True) # 내림차순 정렬
print('list2:', list2)
4. sorted(), reverse()
list3 = sorted(list) # 오름차순 정렬
list3.reverse() # 역순으로 정렬
----------------------------
### 튜플
1. 순차적인 자료구조이다.
2. 튜플 데이터는 괄호() 안에 데이터를 저장한다.
3. 튜플 데이터는 수정 할 수 없다.
4. 튜플은 여러가지 자료형의 데이터를 혼용해서 저장할 수 있다.
t1 = () # 비어있는 튜플 : ()
t2 = (1,) # (1,)
t3 = (1,2,3) # (1,2,3)
t4 = 1, 2, 3 # (1,2,3) : 괄호 없어도 여러 값을 저장하면 튜플이 됨
t5 = (30, 3.14, True, False, 'python')
# t5[1] = 42.195 # 오류 발생 : 튜플데이터는 수정할 수 없다.
# TypeError: 'tuple' object does not support item assignment 이런 오류~
t6 = ('a', 'b', 'c', ('ab', 'cd')) # 중첩 튜플 가능!
# 1.튜플의 인덱싱
t1 = (1, 2, 'a', 'b')
print(t1[0]) # 1
# 2. 튜플의 슬라이싱
[ start index : end index ] (end 미만까지~)
t2 = (10, 20, 30, 40, 50)
print(t2[1:3]) # 인덱스 1~2번까지 슬라이싱 : (20, 30)
# 3. 튜플 더하기 : +
print(t1 + t2) # (1, 2, 'a', 'b', 10, 20, 30, 40, 50)
print(t2 + t1) # (10, 20, 30, 40, 50, 1, 2, 'a', 'b')
# 4. 튜플 곱하기 : * (반복)
print(t2 * 3) # (10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 10, 20, 30, 40, 50)
# 튜플의 함수
# 1. len() : 튜플 원소의 갯수를 구해주는 함수
t1 = (10, 20, 30, 40, 50)
print(len(t1)) # 튜플 원소의 갯수 : 5
print(t1) # (10, 20, 30, 40, 50)
# 2. count() : 튜플의 특정 원소의 갯수를 구해주는 함수
t2 = (1,100,2,100,3,100,4,100,5,100)
print(t2.count(100)) # 튜플의 원소 100의 갯수 : 5
# 3. index() : 튜플의 특정 원소의 인덱스 번호를 구해주는 함수
t3 = ('java','jsp','python','spring','R','tensorflow','keras')
print(t3.index('spring')) # spring 원소의 인덱스 번호 : 3
# 튜플 패킹(tuple packing) : 여러 데이터를 튜플로 묶는 것
t1 = 10, 20, 30
print(type(t1)) # <class 'tuple'>
# 튜플 언패킹(tuple unpacking)
1. 튜플의 각 원소를 여러개의 변수에 할당하는 것
2. 튜플의 원소의 갯수와 변수 갯수가 일치되지 않으면 에러발생
one, two, three = t1 # t1=(10,20,30) 패킹된 튜플
print('one:', one) # 10
여기서 만약에
one, two, three, four=t1이라고 쓰면 오류남 튜플 원소 개수와 변수 개수가 같지 않기 때문에!
# ValueError: not enough values to unpack (expected 4, got 3)
---------------------------
### set(집합) 자료형의 특징
1. 중복데이터를 저장할 수 없다.
2. 순차적인 자료구조가 아니다. ---> 순서 있는 입/출력을 처리할 수 없다.
s1 = set([1,2,3,4])
print(s1) # {1, 2, 3, 4}
s2 = set('Hello')
print(s2) # {'e', 'H', 'o', 'l'} --- 중복 없이, 순차 없이
※ 집합(set)은 인덱싱을 할 수 없음 --- s2[1] 이런거 안된단 뜻임
1 s3 집합을 list로 변환 : list()
list1 = list(s3)
print(list1[0]) # 1
2 s3 집합을 tuple로 변환 : tuple()
t1 = tuple(s3)
print(t1[2]) # 3
# 이런 식으로 집합을 리스트나 튜플로 변환해 인덱싱을 하는 방식을 사용해야 함!
# 교집합 : &, intersection()
# 합집합 : |, union()
# 차집합 : -, difference()
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
1. 교집합
print(s1 & s2) # {4, 5, 6}
print(s1.intersection(s2)) # {4, 5, 6}
2. 합집합
print(s1 | s2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(s1.union(s2)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
3. 차집합
print(s2 - s1) # {8, 9, 7}
print(s2.difference(s1)) # {8, 9, 7}
# 집합의 함수
1. add() : 집합에 1개 값을 추가
s1 = set([1, 2, 3])
s1.add(3) # 중복된 값을 저장할 수 없다.
s1.add(4) # s1 : {1,2,3,4}
2. update() : 집합에 여러개의 값을 추가
s2 = set([1, 2, 3])
s2.update([4, 5, 6]) # s2 : {1, 2, 3, 4, 5, 6}
3. remove() : 집합의 특정 원소를 삭제
s3 = set([1, 2, 3])
s3.remove(2) # 원소 2를 삭제 s3 : {1,3}
s3.remove(3) # 원소 3를 삭제 s3 : {1}