096 순차적인 정수 리스트 만들기(range)
파이썬 내장함수인 range()는 특정 범위의 순차적인 정수 리스트를 만들 수 있게 해줌.
# 문법
# range(시작숫자, 끝숫자, 스탭)
# ex) range(1,11) => 1,2,3,4,5,6,7,8,9,10
# range(1,11) 함수의 데이터를 출력하려면 for loop문을 사용하거나 아니면 list()함수를 사용하면 됨.
for i in range(1,11):
print(i)
# 또는
list(range(1,11))
문제331. range함수를 이용해서 주사위를 2개 만드시오.
dice1 = list(range(1,7))
dice2 = list(range(1,7))
문제332. 지금 만든 주사위 2개를 동시에 던져서 두 눈의 합이 10이 되는 확률을 구하시오.
import random
dice1 = list(range(1,7))
dice2 = list(range(1,7))
cnt = 0
for i in range(10000):
a = random.choice(dice1)
b = random.choice(dice2)
if a+b == 10:
cnt += 1
print(cnt / 10000)
097 리스트에서 특정 위치의 요소 얻기
리스트의 특정 위치에 있는 요소값을 구하려면 인덱싱을 이용
인덱스는 0번부터 시작함
a = [1,2,'a','b','c',[4,5,6]]
# 리스트 a에서 숫자 2 출력하기
print(a[1])
# 리스트 a에서 숫자 4 출력하기
print(a[5][0])
문제333. 아래의 리스트에서 숫자 7을 출력하시오.
b = [2,3,4,[5,6],[7,8],9]
print(b[4][0])
098 리스트에서 특정 요소의 위치 구하기(index)
리스트 객체의 index() 메소드는 리스트에서 요소의 값을 알고 있을 때 그 요소가 최초로 나타나는 위치의 인덱스를 리턴함.
a = [1,2,'a','b','c',[4,5,6]]
# 리스트 a에서 숫자2의 위치인덱스를 출력하시오
print(a.index(2))
문제334. 위의 a리스트에서 숫자4의 위치 인덱스를 출력하시오.
print(a[5][0])
리스트 안에 있는 리스트의 인덱스 번호는 출력하지 못함.
문제335. 부정단어가 들어있는 neg 리스트에 버그라는 단어가 있는지 확인하시오.
neg.index('버그')
문제336. 레이디 버그 게시판 글에는 버그라는 단어가 몇 번 나오는지 count 하시오..
lady2.count('버그')
=> 문제 330번 부정단어에서 버그가 포함된 부정단어 갯수를 빼줘야함.
099 리스트에서 특정 위치의 요소를 변경하기
list_a = ['a','b','c','d','e','f','g']
print(list_a[0]) # a
list_a[0] = 'z' # list_a의 0번째 요소를 z로 변경해라
print(list_a[0])
문제337. 알파벳 소문자 전체를 리스트로 구성하고 b라는 변수로 만드시오.
import string
b = []
for i in string.ascii_lowercase:
b.append(i)
print(b)
문제338. 위의 b리스트의 요소 중에서 알파벳 t를 kkk로 변경하시오.
b.index('t') # 19
b[19] = 'kkk'
b[19]
100 리스트에서 특정 구간에 있는 요소 추출하기
리스트에서 특정 구간에 있는 요소를 출력하여 새로운 리스트를 만들려면 슬라이싱을 이용하면 됨.
list_a = ['a','b','c','d','e','f','g']
print(list_a[0:4]) # 0번째 요소부터 4미만까지 출력
print(list_a[2:]) # 2번째 요소부터 끝까지 출력
print(list_a[:3]) # 처음부터 3번째 미만까지 출력
문제339. 사원테이블의 이름을 emp_ename이라는 변수에 담으시오.
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
a = emp['ename'].values # 판다스 시리즈를 넘파이 어레이로 변환
emp_ename = list(a) # 넘파이 어레이를 리스트로 감쌈
문제340. emp_ename 리스트에서 알파벳이 A로 시작하는 이름을 A_list라는 변수에 담으시오.
A_list =[]
for i in emp_ename:
if i[0] == 'A':
A_list.append(i)
A_list
# def func(x):
# if x[0] == 'A':
# return x
# A_list = list(filter(func,emp_ename))
# A_list
101 리스트에서 짝수 번째 요소만 추출하기
리스트에서 짝수번째 요소를 출력하는 방법은 두번째 요소부터 끝까지 스탭2로 슬라이싱 하면 됨.
list_a = ['a','b','c','d','e','f','g']
print(list_a[1::2])
문제341. 1부터 100까지의 숫자중에서 짝수만 아래와 같이 list_b리스트에 담아서 출력하시오.
list_b = list(range(2,101,2))
print(list_b)
문제342. 서점에 가서 책을 찾을 때 진열대에서 책을 한번에 찾기 어려움. 책 검색대에서 원하는 책의 위치정보를 프린트해서 그 위치에 가서 책을 찾을때 책장에서 책을 단번에 찾기가 어려움. 이를 빨리 찾기 위한 시스템을 만들기 위해 긍정단어 리스트에서 accurate를 찾고 싶다면 긍정단어 리스트에서 accurate는 알파벳 a로 시작하는 단어들 중에 19번째에 있습니다. 라는 메시지가 출력되게 합니다.
positive-words.txt를 pos라는 리스트에 담고 이중에서 알파벳 a로 시작하는 단어들만 a_list에 담습니다. 그리고 a_list에서 accurate가 몇번째 인덱스인지 출력하시오.
def search_kyobo(word):
positive = open('c:\\data\\positive-words.txt')
pos = positive.read().split('\n')
pos = list(filter(lambda x : x, pos))
a_list = list(filter(lambda x:x[0] == word[0],pos))
print(word,'는 알파벳',word[0].upper(),'진열대에서 %d번째에 있습니다.'%(a_list.index(word)+1))
search_kyobo('accurate') #accurate 는 알파벳 A 진열대에서 19번째에 있습니다.
search_kyobo('adaptive') #adaptive 는 알파벳 A 진열대에서 27번째에 있습니다.
문제 343. 알파벳 a로 시작하는 단어뿐만 아니라 어느 철자를 넣어도 결과가 출력되게 하시오. (위의 코드와 동일.)
# lambda 에서 if문을 사용했을 때의 문법
# lambda x: 실행문 if 조건문 else 실행문
# 선생님이 쓰신 코드
def search_kyobo(word):
positive = open('c:\\data\\positive-words.txt')
pos = positive.read().split('\n')
pos = list(filter(lambda x:x, pos))
f_name = word[0]
a_words = lambda x : True if x[0] == f_name else False
a_list = list(filter(a_words,pos))
k = a_list.index(word) + 1
print(word,'는 알파벳',word[0].upper(),'진열대에서 %d번째에 있습니다.'%k)
search_kyobo('accurate')
102 리스트 요소 순서를 역순으로 만들기 ① (reverse)
리스트 객체의 reverse() 메소드(함수)는 리스트의 모든 요소 순서를 거꾸로 만듦.
list_a = ['a','b','c','d','e','f','g']
list_a.reverse()
print(list_a)
문제344. 아래의 리스트를 만들고 abcd 순서대로 리스트 안에서 정렬되게 하시오.
list_b = ['g','d','e','c','a','b','f']
list_b.sort()
print(list_b)
문제345. 긍정단어 한글 리스트 pos를 ㄱㄴㄷ순으로 정렬하시오.
positive = open('c:\\data\\positive_kor.txt')
pos = positive.read().split('\n')
pos = list(filter(lambda x:x, pos))
pos.sort() # asc하게 정렬
pos_kr = pos.copy() # pos를 copy해서 pos_kr리스트를 구성
pos_kr
103 리스트 요소 순서를 역순으로 만들기 ② (reversed)
리스트 요소 순서를 역순으로 만드는 또 다른 방법은 파이썬 내장함수인 reversed()를 이용하는 방법. reverse()는 인자로 입력된 시퀀스 자료형의 요소 순서를 역순으로 완전히 변경하는 것. 반면에 reversed()는 원본데이터를 역순으로 변경하는 것은 아니고 변경된것으로 보이게 하는 것.
reverse() : 원본 데이터를 역순으로
reversed() : 역순으로 만들지만 원본 데이터를 역순으로 만들지 않음.
list_a = ['a','b','c','d','e']
list_a.reverse() # list_a의 요소를 역순으로 변경
print(list_a)
list_b = ['a','b','c','d','e']
result = reversed(list_b)
print(list(result)) # 역순으로 보임
print(list_b) # 원본은 그대로
문데346. 사원 데이터 프레임에서 월급을 역순으로 담는 리스트를 다음과 같이 생성하시오.
print(sal_list)
[5000, 3000, 3000,....]
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
a = emp.sal.values
sal_list = list(a)
sal_list.sort()
sal_list.reverse()
sal_list
104 리스트 합치기(+)
두 개의 리스트를 연결하여 새로운 리스트를 만드는 방법은 +연산자를 이용해 두개의 리스트를 더하면 됨.
a = [1,2,3]
b = [4,5,6]
c = a+b
print(c) #[1, 2, 3, 4, 5, 6]
문제347. 아래와 같이 엄마와 아기가 함께하는 수영교실 나이 리스트를 생성하시오.
a = [34]*10
b = [2]*10
c = a+b
c
문제348. 엄마와 아기가 함께하는 수영교실의 나이의 평균값이 어떻게 되는가?
import pandas as pd
a = [34]*10
b = [2]*10
c = a+b
c_1 = pd.Series(c) # 리스트를 판다스 시리즈로 변환
c_1.mean() # 시리즈의 메소드 사용 가능해짐
ㅇ Series의 메소드
.mean() # 평균값
.median() # 중앙값
.mode() # 최빈값
.max() # 최대값
.min() # 최솟값
.sum() # 토탈값
.var() # 분산값
.std() # 표준편차값
문제349. 엄마와 아기가 함께하는 수영교실의 중앙값 출력
import pandas as pd
a = [34]*10
b = [2]*10
c = a+b
c_1 = pd.Series(c)
c_1.median()
리스트의 요소의 갯수가 홀수개면 중앙값은 그 리스트의 가운데 위치한 값이 되고 짝수개이면 가운데 2개의 평균값이 됨.
문제350. 엄마와 아기가 함께하는 수영교실의 나이의 최빈값을 출력하시오.
import pandas as pd
a = [34]*10
b = [2]*10
c = a+b
c_1 = pd.Series(c)
c_1.mode()
105 리스트 반복하기(*)
list*숫자는 리스트를 숫자만큼 반복해서 새로운 리스트를 만듦.
list_a = [1,2,3] * 3 # [1, 2, 3, 1, 2, 3, 1, 2, 3]
list_a*2
문제351. 우리반 나이 데이터의 평균값, 중앙값, 최빈값을 출력하시오.
import pandas as pd
emp14 = pd.read_csv("c:\\data\\emp14.csv")
age = emp14.age
print(age.mean()) # 평균값
print(age.median()) # 중앙값
print(age.mode()) # 최빈값
문제352. 우리반 나이 데이터를 가지고 히스토그램 그래프를 그리시오.
emp14.age.hist(bins = 10)
또는 넘파이 사용하기
import numpy as np
import pandas as pd
emp14 = pd.read_csv("c:\\data\\emp14.csv")
age = emp14.age
count, bins = np.histogram(emp14.age, bins = 10)
print(count, bins)
# [3 4 2 5 1 3 0 4 1 1] <= 빈도
# [23. 24.1 25.2 26.3 27.4 28.5 29.6 30.7 31.8 32.9 34. ] <= 계급
위의 데이터로 히스토그램 그래프 그리기
import numpy as np
import pandas as pd
emp14 = pd.read_csv("c:\\data\\emp14.csv")
age = emp14.age
count, bins = np.histogram(emp14.age, bins = 10)
# print(count, bins)
import matplotlib.pyplot as plt
plt.grid() #그리드 빼면 격자무늬 빠짐
plt.hist(emp14.age, bins, color='lightsteelblue')
plt.hist(데이터, 계급의 갯수, 색깔)
문제353. 사원 테이블의 월급을 히스토그램 그래프로 그리시오.
import pandas as pd
emp= pd.read_csv("c:\\data\\emp2.csv")
emp.sal.hist(bins = 10)
bins는 히스토그램 그래프에서 출력되는 막대 그래프의 갯수로 보면 됨. 히스토그램 그래프를 보면 데이터가 대체적으로 어떻게 분포가 되어 있는지 확인할 때 유용. 사원 테이블의 월급은 대체적으로 1000~ 2000 사이의 월급을 받는 사원들이 많은 것을 한번에 확인할 수 있음.
106 리스트에 요소 추가하기(append)
리스트.append('요소명') : 리스트의 맨마지막에 원소로 요소명을 입력
a = ['태양','수성']
a.append('금성')
print(a) #['태양', '수성', '금성']
a.append('지구')
print(a) #['태양', '수성', '금성', '지구']
a.append('화성')
print(a) #['태양', '수성', '금성', '지구', '화성']
문제354. ['태양', '수성', '금성', '지구', '화성'] 이 있는 a리스트에 목성과 토성을 append 시키세요.
a.append('목성')
a.append('토성')
print(a) #['태양', '수성', '금성', '지구', '화성', '목성', '토성']
107 리스트의 특정 위치에 요소 삽입하기(insert)
리스트.insert(3, '요소명') : 리스트의 특정 위치에 새로운 요소를 입력
append는 무조건 맨 마지막에 요소를 추가하는 것인데 insert는 원하는 위치에 추가시킬 수 있음.
a = ['태양', '수성', '금성', '지구', '화성', '목성', '토성', '해왕성'] 에 토성 다음에 천왕성을 입력하고 싶다면?
a.insert(7,'천왕성')
print(a) #['태양', '수성', '금성', '지구', '화성', '목성', '토성', '천왕성', '해왕성']
문제355. 위의 a리스트에서 화성 다음에 소행성을 입력하시오.
a.insert(a.index('화성')+1, '소행성')
a #['태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
108 리스트의 특정 위치의 요소 제거하기(del)
del(리스트[인덱스번호]) : 리스트의 요소를 지우는데 인덱스 번호를 통해서 지움
문제356. 아래의 a리스트에서 del메소드로 목성을 지우시오.
a = ['태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
del(a[a.index('목성')])
a #['태양', '수성', '금성', '지구', '화성', '소행성', '토성', '천왕성', '해왕성']
109 리스트에서 특정 요소 제거하기(remove)
리스트.remove('요소명') : 리스트의 요소를 지우는데 요소명을 통해서 지움
a = ['태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
a.remove('목성')
a #['태양', '수성', '금성', '지구', '화성', '소행성', '토성', '천왕성', '해왕성']
단, remove는 모든 요소를 지우는게 아니라 여러개의 요소 중 "하나만" 제거함.
a = ['목성','태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
a.remove('목성')
a #['태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
두번째 목성은 remove되지 않음.
110 리스트에서 특정 구간에 있는 모든 요소 제거하기
a = ['태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
del(a[:])
print(a) #[]
태양부터 금성까지만 지우고 싶다면? => 슬라이싱 이용
a = ['태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
del(a[:3])
a #['지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
문제357. 아래의 a리스트에서 짝수번째 요소만 지우시오.
a = ['태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
del(a[1::2])
a #['태양', '금성', '화성', '목성', '천왕성']
리스트에서 특정 요소 하나만 지울때는 remove가 편하고, 리스트에서 여러개의 요소를 한버넹 지울때는 del이 편함.
111 리스트에 있는 요소 개수 구하기(len)
파이썬 내장함수인 len()을 이용해서 리스트의 요소의 갯수를 구함. 리스트 객체에는 .len()이라는 메소드가 없음.
a = ['태양', '수성', '금성', '지구', '화성', '소행성', '목성', '토성', '천왕성', '해왕성']
print(len(a)) #10
문제358. 긍정단어 리스트에는 긍정 단어들이 총 몇개가 있는가?
positive = open("c:\\data\\positive_kor.txt")
pos = positive.read().split('\n')
pos = list(filter(lambda x:x, pos))
print(len(pos)) #1187
112 리스트에서 특정 요소 개수 구하기(count)
리스트.count('요소명') : 리스트에서 특정 요소명이 몇개가 있는지 출력
예제. 아래의 box리스트에서 blue는 총 몇개 있는가?
box = ['red','red','blue','blue','green']
box.count('blue') # 2
ㅇ 리스트의 모든 함수(메소드) 정리
1. 리스트.index('요소명') : 리스트의 특정 요소명의 위치 인덱스 번호 출력
2. 리스트.reverse() : 리스트 요소들을 역순으로 배열함(실제로 원본 변경)
3. 리스트.reversed() : 리스트 요소들을 역순으로 배열해서 보여주는 것
4. 리스트.append('요소명') : 리스트의 맨마지막에 원소로 요소명을 입력
5. 리스트.count('요소명') : 리스트에서 특정 요소명이 몇개가 있는지 출력
6. 리스트.insert(3, '요소명') : 리스트의 특정 위치에 새로운 요소를 입력
7. 리스트[2:4] # 슬라이싱
8. del(리스트[인덱스번호]) : 리스트의 요소를 지우는데 인덱스 번호를 통해서 지움
9. 리스트.remove('요소명') : 리스트의 요소를 지우는데 요소명을 통해서 지움
10. len(리스트) : 리스트 요소의 갯수를 구함.
문제 359. (오늘의 마지막 문제) 다음의 a 리스트에 정상과 코로나 환자를 만드는데 정상은 97명, 코로나 환자는 3명을 만들고 이중에 랜덤으로 10명을 만났을 때 코로나 환자를 만나는 확률을 구하시오. (비복원추출로 하세요)
import numpy as np
b = ['음성']*97
c = ['양성']*3
a = b+c
result = np.random.choice(a, 10, replace=False)
print('코로나 환자를 만날 확률 : ', list(result).count('양성') / 10)
###############################################################################
import numpy as np
b = ['음성']*97
c = ['양성']*3
a = b+c
cnt = 0
for i in range(100000):
result = np.random.choice(a, 10, replace=False)
if list(result).count('양성') >=1:
cnt += 1
print('코로나 환자를 만날 확률 : ',cnt / 100000)
'Study > class note' 카테고리의 다른 글
커피 키오스크 오늘의 추천메뉴 + 메뉴안내 (0) | 2021.12.28 |
---|---|
python / 커피키오스크 data add함수 따로 뺀 코드 (0) | 2021.12.28 |
python / decode (0) | 2021.12.27 |
python / 문자열(isalnum, upper, lower, lstrip, rstrip, strip, count, find, split, join, replace, encode) (0) | 2021.12.24 |
python / 문자열(슬라이싱, 스텝,+,*, in, len,isalpha,isdigit) (0) | 2021.12.23 |