sm 기술 블로그
7. 배열 (리스트/데이터 사전/튜플/set) 본문
리스트
리스트는 데이터들을 잘 관리하기 위해서 묶어서 관리할 수 있는 자료형 중의 하나 이다.
(1) 기본 구조
# 지하철 칸 별로 10명, 20명, 30명
subway1= 10
subway2= 20
subway3= 30
subway = [10, 20, 30]
print(subway)
subway1 , subway2, subway3 을 따로따로 선언 할 수 있지만, 리스트를 이용하면 subway = []로 한번에 정의가 가능하다.
리스트에 대한 출력 결과는 [ ] 가 붙어서 나온다.
# 출력결과
[10, 20, 30]
(2) 함수 - index() append() insert()
subway = ["유재석", "조세호", "박명수"]
print(subway)
#조세호씨가 몇 번째 탑승?
print(subway.index("조세호"))
#하하가 다음 정류장에 다음칸에 탐
subway.append("하하") #(현재 ["유재석", "조세호", "박명수", "하하"])
print(subway)
#append는 맨뒤에 들어감.
#정형돈이가 유재석 과 조세호 사이에 태워좀
subway.insert(1, "정형돈")
print(subway)
_____.index("A") : 리스트 중에서 A가 몇번째에 있는지 알려준다.
_____.append("B") : 리스트 맨 뒤에 B를 추가시킨다.
_____.insert(1, "C") : 리스트의 1 위치에 C를 추가한다.
# 출력결과
['유재석', '조세호', '박명수']
1
['유재석', '조세호', '박명수', '하하']
['유재석', '정형돈', '조세호', '박명수', '하하']
※ 문자열은 리스트 내에서 ['문자열'] 로 표시된다.
(3) 함수 - pop() count()
subway = ["유재석", "조세호", "박명수"]
# 지하철에 있는 사람을 한 명씩 뒤에서 꺼냄
print(subway.pop()) # 박명수
print(subway) #["유재석", "조세호"]
print(subway.pop()) # 조세호
print(subway) #["유재석"]
# 같은 이름의 사람이 몇 명 있는지 확인
subway.append("유재석")
print(subway) #["유재석", "유재석"]
print(subway.count("유재석")) # 2
_____.pop() : 리스트에서 맨 뒤에 있는 값을 꺼낸다.
_____.count("A") : A가 몇번 들어 있는지 출력해 줌.
# 출력 결과
박명수
['유재석', '조세호']
조세호
['유재석']
['유재석', '유재석']
2
(4) 함수 - sort() reverse() remove(), num_list(), clear()
# 정렬도 가능
num_list = [1,2,5,3,4]
num_list.sort()
print(num_list)
# 리스트를 역으로 바꿔 줌.
num_list.reverse()
print(num_list)
# 특정 값 삭제
num_list.remove(1)
print(num_list)
# 특정 위치 삭제
del num_list[2]
print(num_list)
# 특정 범위 삭제
del num_list[0:2]
print(num_list)
num_list = [1,2,5,3,4]
print(num_list)
#모두 지우기
num_list.clear()
print(num_list)
_____.sort() : 순서에 맞게 정렬
_____.reverse() : 현재 리스트의 순서를 뒤집는다.
_____.remove("A") : 리스트 내에 A를 삭제한다. (순서가 앞쪽 부터 삭제되며, 여러번 하기 위해서는 반복문 필요)
del _____[ ] : 특정 위치를 삭제해줌 , 범위 삭제도 가능하다.
_____.clear() : 리스트 내의 모든 항목 삭제
# 출력결과
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
[5, 4, 3, 2]
[5, 4, 2]
[2]
[]
(5) 기타
num_list = [1,2,5,3,4]
print(num_list)
#다양한 자료형 함께 사용 가능
mix_list =["조세호",20,True]
print(mix_list)
#리스트 확장도 가능함.
num_list.extend(mix_list)
print(num_list)
리스트는 문자열, 정수, boolean 등 다양한 자료형과 함께 사용이 가능하고, 확장도 가능하다.
# 출력결과
[1, 2, 5, 3, 4]
['조세호', 20, True]
[1, 2, 5, 3, 4, '조세호', 20, True]
데이터 사전
대부분 읽기 전용으로 제공되는 테이블 및 뷰들의 집합.
데이터베이스의 전반에 대한 정보를 제공하는 것
(1) 기본 구조
cabinet = {3:"유재석", 100:"김태호"}
print(cabinet[3])
print(cabinet.get(3))
print(cabinet[100])
#출력 결과
유재석
유재석
김태호
(2) 예외
cabinet = {3:"유재석", 100:"김태호"}
print(cabinet.get(3))
# print(cabinet[5]) # 오류가 발생하면 프로그램이 종료됨.
print(cabinet.get(5)) # 값이 없으면 None을 출력하고 개속 진행됨.
print(cabinet.get(5, "사용가능")) #만약 값이 없다면 5번에 다음 문자열을 삽입
print(3 in cabinet) #리스트 안에 있는지 확인함 True
print(6 in cabinet) #False
get
get없이 호출 할 경우 오류가 발생하면 프로그램이 종료됨.
get이 있으면 None이 출력되고 계속 진행된다.
get(3, "사용가능") 현재 3번은 유재석이다. 이때 유재석이 출력된다. 그런데 만약 3에 유재석이 없다면,
사용 가능이란 문자열이 들어가게 된다.
in
( _ in _______ ) 문을 통해서 값이 있는지 없는지 확인 가능하다.
# 출력 결과
유재석
None
사용가능
True
False
(3) 함수
#스트링도 가능함
cabinet = {"A-3":"유재석","B-100":"김태호"}
print(cabinet["A-3"])
print(cabinet["B-100"])
#새 손님
print(cabinet)
cabinet["A-3"] = "김종국"
cabinet["C-20"] = "조세호"
print(cabinet)
#간 손님
del cabinet["A-3"]
print(cabinet)
#key 들만 출력
print(cabinet.keys())
#value 들만 출력
print(cabinet.values())
# key,value
print(cabinet.items())
#다 나감.
cabinet.clear()
print(cabinet)
숫자 형식이 아닌 문자열 형식으로 데이터 사전 정의도 가능하다.
3 : 유재석 -> A-3 : 유재석 (A-3을 호출 하면 유재석이 호출됨)
추가도 가능하다.
del ______[ ] : [ ]안에 조건에 부합하는 데이터를 삭제함.
______.key() : key들만 출력 (위의 예제에서 A-3, B-100, C-20 key 이다.)
______.values() : 값들을 출력 (위의 예제에서는 유재석, 김태호, 조세호, 김종국이 값이다.)
______.items() : key 와 values를 같이 출력한다.
______.clear() : 데이터를 모두 지운다.
# 출력 결과
유재석
김태호
{'A-3': '유재석', 'B-100': '김태호'}
{'A-3': '김종국', 'B-100': '김태호', 'C-20': '조세호'}
{'B-100': '김태호', 'C-20': '조세호'}
dict_keys(['B-100', 'C-20'])
dict_values(['김태호', '조세호'])
dict_items([('B-100', '김태호'), ('C-20', '조세호')])
{}
튜플
사전적 의미 : 셀 수 있는 수량의 순서 있는 열거
선언한 값을 고유하게 갖는다. (추가, 삭제, 변경이 불가능 하다.)
기본 구조
# 튜플은 추가가 불가함.
menu = ("돈까스", "치즈까스") #()를 통해서 튜플을 선언
print(menu[0])
print(menu[1])
# menu.add("생선까스") 오류발생
menu2 = "돈까스", "생선까스", "돈까스"
print(f"menu2 : {menu2}")
print(1 in menu2)
print(menu2.count("돈까스"))
(name , age, hobby) = ("김종국", 20, "코딩")
리스트는 [] 를 데이터 사전은 {키 : 값}을 튜플은 ()을 사용한다. [튜플은 () 생략 가능]
튜플은 추가,삭제,변경이 불가능하여 오류를 발생시킨다.
in을 통해 값이 있는지 확인이 가능하다.
count를 통해 찾고자하는 값이 몇개 있는지 확인 가능하다.
튜플로 한번에 매개변수를 선언하는 것도 가능하다.
# 출력결과
돈까스
치즈까스
menu2 : ('돈까스', '생선까스', '돈까스')
False
2
김종국 20 코딩
튜플 함수
shuffle( 튜플 )
sample( 튜플 , 개수)
shuffle(T) : T 안의 값을 무작위로 바꿔준다.
sample( T , n ) : T 안의 값 중에서 무작위로 값을 n개 뽑아준다.
set (집합)
중복이 안되고 순서가 없다.
my_set = {1,2,3,3,3}
print(my_set)
키와 값이 없이 {}만 사용
중복이 불가능 하여 3은 한번만 출력된다.
# 출력결과
{1, 2, 3}
java ={"유재석","김태호","양세형"}
python = set(["유재석","박명수"])
# 교집합 (java와 python을 모두 할 수 있는 사람)
print(java & python)
print(java.intersection(python))
# 합집합 (java를 하거나 python을 하는 사람)
print(java | python)
print(java.union(python)) #순서가 보장되지 않아 어디에 출력될지는 모름
# 차집합 (java는 하는데 python은 못하는 사람)
print(java - python)
print(java.difference(python))
# python 할 줄 아는사람이 늘어남
python.add("김태호")
print(python)
# java를 잊어버림
java.remove("김태호")
print(java)
{}을 통해서 set을 정의 할 수 있지만, 리스트 []를 만들고 set을 선언하여 집합을 만들 수 있다.
교집합
A&B , A.intersection(B) : A와 B가 겹치는 값
합집합
A | B , A.union(B) : A의 값과 B의 값 모두를 합친다. (순서는 보장되지 않는다.)
차집합
A - B, A.difference(B) : A의 값중 B와 포함된 값(교집합)을 빼준다.
____.add() 를 통해서 추가하고, _____.remove() 를 통해서 제거해준다.
# 출력결과
{'유재석'}
{'유재석'}
{'유재석', '김태호', '박명수', '양세형'}
{'유재석', '김태호', '박명수', '양세형'}
{'김태호', '양세형'}
{'김태호', '양세형'}
{'유재석', '김태호', '박명수'}
{'유재석', '양세형'}
자료구조 변경
menu = {"커피","우유","주스"}
print(menu, type(menu))
menu = list(menu)
print(menu, type(menu)) #[]
menu = tuple(menu)
print(menu, type(menu)) #()
menu = set(menu)
print(menu, type(menu)) #{}
리스트, 튜플, 집합을 자유롭게 구조를 변경 시킬 수 있다.
처음 선언된 구조는 집합이지만, list() tuple() set()을 이용해 리스트, 튜플, 집합으로 변환 시켜줄 수 있으며,
print(type()) 을 이용하면 현재 타입을 알 수 있다.
# 출력 결과
{'커피', '우유', '주스'} <class 'set'>
['커피', '우유', '주스'] <class 'list'>
('커피', '우유', '주스') <class 'tuple'>
{'커피', '우유', '주스'} <class 'set'>
리스트는 [ ] 집합은 { } 튜플은 ( ) 란 것을 잊지 말자.
'Python' 카테고리의 다른 글
9. 반복문 (for / while) (0) | 2022.05.05 |
---|---|
8. 조건문(분기) (0) | 2022.05.05 |
6. 탈출문자 (0) | 2022.05.03 |
5. 문자열(슬라이싱/문자열 처리함수) (0) | 2022.05.02 |
4. 랜덤 함수 (0) | 2022.05.02 |