💻STUDY/PYTHON STUDY

7주차 수업 복습

coldNoodlePigeon 2021. 4. 14.

리스트 

 

 

리스트 기초 

 

 

>>> weekday=['mon','tue','wed']
>>> weekday_2=['thur','fri']
>>> weekday.append(weekday_2)
>>> print(weekday)
['mon', 'tue', 'wed', ['thur', 'fri']]
>>> print(weekday[3])
['thur', 'fri']
>>> print(weekday[3][1])
fri

 

>>> alphabet=['a','b','c']
>>> extra=['d','e']
>>> alphabet.extend(extra)
>>> print(alphabet)
['a', 'b', 'c', 'd', 'e']
>>> alphabet.insert(1,'saechigi')
>>> print(alphabet)
['a', 'saechigi', 'b', 'c', 'd', 'e']

append, extend, insert의 기능은 다르다. 비슷한것 같지만 다르다!! 

 

>>> numbers=[1,2,3]
>>> numbers=[1,2,3,4,5,6,7]
>>> numbers.remove(7)
>>> numbers
[1, 2, 3, 4, 5, 6]
>>> del numbers[5]
>>> numbers
[1, 2, 3, 4, 5]
>>> numbers.pop()
5
>>> numbers
[1, 2, 3, 4]

 

remove,del의 기능은 같지만 remove의 경우는 삭제할 항목을 직접 지정해줘야하고,

del은 인덱스를 통해 삭제할 항목을 지정해줘야 한다. pop의 경우는 맨 끝에 있는 항목을 리스트에서 삭제후 빼내는 역할을 한다. 

 

 

>>> 'a' in alphabet
True
>>> 'd' in alphabet
False
>>> 'd' not in alphabet
True

 

in/not in 은 리스트에 특정 항목이 존재하는지의 여부를 따져서 맞으면 True, 틀리면 False 값을 반환하도록 함. 

 

소수 찾기 예제 

 

1부터 1000, 10000, 100000 사이의 소수prime number를 각각 탐색 

 

방법1. 각 숫자(n)을 2부터 n-1까지 나누어서 나누어 떨어지지 않는 수를 소수 리스트에 추가.   

 

방법2. 2~n까지의 수를 리스트에 추가-> 리스트의 가장 작은 수 s의 배수 s*i(i=1,2,3,4 ... k) 를 계산하여 리스트에서 제거-> s*i가 n의 크기를 넘어가면 중단. s 다음의 수를 계속해서 진행하여 리스트에서 차례차례 제거함. 

 

 

#방법 1. 리스트에 추가하는 방식. 

import time 
def prime1(): 
    global upper
    t1= time.time() 
    num=[] 
    for i in range(2, upper + 1): 
            prime = True 
            if i == 2: 
                prime = True 
            else: 
                for j in range(2, i):
                    if i % j == 0: 
                        prime = False 
                        break 
            if prime == True: 
                num.append(i)

    t2=time.time()
    print("걸린 시간: ",t2-t1)
    print("소수의 개수: ",len(num))
    print(num)
upper= 1000
prime1()

 

 

#방법2: 2이상의 배수를 리스트에서 삭제하는 방법 

import time
def prime2():
    global upper
    t1=time.time()
    num=[]

    for i in range(2,upper+1):
        num.append(i)
    for i in num:
        for j in range(2,upper+1):
            s=i*j
            if s>upper:
                break
            if s in num:
                num.remove(s)
    t2=time.time()
    print("걸린 시간: ",t2-t1)
    print("소수의 개수: ",len(num))
    print(num)


print("방법2")
prime2()     

 

 

 

리스트 자르기 (slicing)

 

하나의 리스트를 인덱스를 사용하여 여러 개의 부분 리스트로 분리하는 것 

 

>>> alphabet=['a','b','c','d','e']
>>> alphabet[1:4]
['b', 'c', 'd']
>>> alphabet
['a', 'b', 'c', 'd', 'e']
>>> alphabet[:]
['a', 'b', 'c', 'd', 'e']
>>> alphabet[1:1]
[]
>>> alphabet[:2]
['a', 'b']
>>> alphabet[2:]
['c', 'd', 'e']

 

>>> alphabet=['a','b','c','d','e']
>>> alphabet[-4:0]
[]
>>> alphabet[-4]

 

>>> alphabet=['a','b','c','d','e']
>>> alphabet[-1:-4:-1]
['e', 'd', 'c']
>>> alphabet[-1:-4]
[]
>>> alphabet[-1:-4:-2]
['e', 'c']

 

 

문자열 자르기

 

>>> string="pigeon"
>>> string[2:3]
'g'
>>> string[2:]
'geon'
>>> string[-4:-1]
'geo'
>>> string[:]
'pigeon'
>>> string[::-1]
'noegip'

 

 

palindrome 예제 

 

def plindrome(text):
    return text == text[::-1]

str=input("ENTER TEXT: ")
if palindrome(str):
    print("palindrome!")
else:
    print("no..")

 

 

리스트 탐색

 

>>> alphabet=['a','b','c','d','e']
>>> len(alphabet)
5
>>> alphabet.index('c')
2

 

>>> kim = [55, 63, 77, 81]
>>> lee = [65, 61, 67, 72]
>>> park= [97, 95, 92, 88]
>>> scores=[kim,lee,park]
>>> scores
[[55, 63, 77, 81], [65, 61, 67, 72], [97, 95, 92, 88]]
>>> for student in scores:
	for score in student:
		print(score,end=' ')
	print()

	
55 63 77 81 
65 61 67 72 
97 95 92 88 
>>> scores[1][2]
67

 

리스트의 정렬

 

>>> alphabet=['a','b','c','d','e']
>>> alphabet.sort()
>>> alphabet
['a', 'b', 'c', 'd', 'e']
>>> alphabet.sort(reverse=True)
>>> alphabet
['e', 'd', 'c', 'b', 'a']

*reverse()는 단순히 항목의 순서를 반대로 바꿔주는 역할

 

 

>>> word1 = ['p', 'y', 't', 'h', 'o', 'n']
>>> word2=word1
>>> word3=word1[:]
>>> print(word2)
['p', 'y', 't', 'h', 'o', 'n']
>>> word3.sort()
>>> word1
['p', 'y', 't', 'h', 'o', 'n']
>>> word3
['h', 'n', 'o', 'p', 't', 'y']
>>> word2.sort()
>>> word2
['h', 'n', 'o', 'p', 't', 'y']
>>> word1
['h', 'n', 'o', 'p', 't', 'y']

 

word2와 word1은 리스트를 공유하고 있음, 그러나 word3는 단순히 리스트를 복사한 것이다. 

 

 

 

리스트의 항목 섞기 

 

import random
menu = ['apple','banana','pineapple','grape','strawberry']
for i in range(5):
    print(random.choice(menu))

random.shuffle(menu)
print(menu) 
apple
grape
grape
grape
banana
['strawberry', 'grape', 'banana', 'pineapple', 'apple']

 

 

예제 공부

 

1. 주사위 예제 

주사위를 각각 100번, 1000번, 10000번 던져서 주사위의 각 눈이 나오는 횟수와 비율을 계 산하는 프로그램

import random

for n in [100,1000,10000]:
    count=[0,0,0,0,0,0]
    print('\n')
    print(n,"번")
    for i in range(n):
        eye=random.randint(1,6)
        count[eye-1]=count[eye-1]+1

    
    print(count)
    

    for i in range(len(count)):
        print("%4.1f" %float(count[i]/n*100),"%",end=' ')
100 번
[18, 19, 23, 7, 19, 14]
18.0 % 19.0 % 23.0 %  7.0 % 19.0 % 14.0 % 

1000 번
[156, 157, 186, 173, 149, 179]
15.6 % 15.7 % 18.6 % 17.3 % 14.9 % 17.9 % 

10000 번
[1745, 1690, 1663, 1604, 1695, 1603]
17.4 % 16.9 % 16.6 % 16.0 % 17.0 % 16.0 % 

 

 

 

2.성적처리 예제

 

점수를 입력받아 리스트에 저장하고 순위를 조회하는 프로그램을 작성해 보자

 

(코드블럭에 옮기기 귀찮다) 

 

 

3. 스택

 

스택(stack)은 나중에 들어간 항목이 가장 먼저 나오는 후입선출 자료구조. 수식변환, 함수호출에서 사용함 

 

>>> stack=[]
>>> stack.append(2)
>>> stack
[2]
>>> stack.append(4)
>>> stack
[2, 4]
>>> stack.append(8)
>>> stack
[2, 4, 8]
>>> c=stack.pop()
>>> c
8
>>> stack
[2, 4]
>>> c=stack.pop()
>>> c
4
>>> stack
[2]
>>> stack.pop()
2
>>> stack
[]

 

 

10진수를 2진수로 변환

 

공부를 위해서 코드블럭에 안옮길거임 

 

 

튜플(tuple)

 

초기화된 후에 리스트 항목의 추가, 삭제 등의 변경이 전혀 불가능함

 

리스트와 같은 기능을 함. 

 

 

>>> odds=(1,3,5,7,9)
>>> odds[0]
1
>>> odds[0]=11
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    odds[0]=11
TypeError: 'tuple' object does not support item assignment
>>> odds.append(11)
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    odds.append(11)
AttributeError: 'tuple' object has no attribute 'append'

 

사전 

 

항목이 키(key)와 값(value)의 쌍으로 구성된 리스트의 또 다른 종류

 

>>>ds_scores = {'kim' : 50, 'lee' : 70}
>>> ds_scores['park']=90
>>> ds_scores['hwang']=75
>>> ds_scores
{'kim': 50, 'lee': 70, 'park': 90, 'hwang': 75}
>>> ds_scores.items()
dict_items([('kim', 50), ('lee', 70), ('park', 90), ('hwang', 75)])
>>> ds_scores.keys()
dict_keys(['kim', 'lee', 'park', 'hwang'])
>>> ds_scores.values()
dict_values([50, 70, 90, 75])
>>> ds_scores['hwang']
75
>>> del ds_scores['park']
#index 대신 key를 넣는다! 
>>> ds_scores
{'kim': 50, 'lee': 70, 'hwang': 75}



>>> for person,score in ds_scores.items():
	print(person,'=',score)

	
kim = 50
lee = 70
hwang = 75
>>> if 'park' not in ds_scores:
	ds_scores['park']=90

	
>>> ds_scores
{'kim': 50, 'lee': 70, 'hwang': 75, 'park': 90}

 

 

'💻STUDY > PYTHON STUDY' 카테고리의 다른 글

9주차 수업 복습  (0) 2021.05.09
8주차 배운거 복습  (0) 2021.04.28
6주차 수업 복습  (0) 2021.04.07
5주차 수업 복습  (0) 2021.03.31
4주차 수업 복습  (0) 2021.03.23

댓글