TIL-no.27 Python advanced 5

sanghun Lee·2020년 7월 12일
0

Today I Learned

목록 보기
25/66

list의 다양한 간단한 필요한 기능들

  • pprint 메소드 및 함수를 통해 리스트를 원하는 모습으로 사각 출력할 수 있다.
a = [[10,20],[30,40],[50,60]]
from pprint import pprint
pprint(a, indent = 4, width= 20) #사각형 모양으로 이중리스트 출력원할시
    [ [10,20],
    [30,40],
    [50,60]]
  • 다양한 방식으로 이차원리스트를 출력하는법 (for , while,이중 for)
a = [[10,20],[30,40],[50,60]]
for x,y in a:
    print(x,y)
print()

for i in a: #전체리스트에서 가로 한줄씩 
    for j in i: #가로한줄안에서 가로 안쪽 요소꺼냄
        print(j, end = ' ')
    print()
print()

for i in range(len(a)): #len(a) 는 3 으로 세로크기
    for j in range(len(a[i])): #len(a[i])는 2로 가로크기
        print(a[i][j], end = ' ')
    print()

i = 0
while i < len(a):
    x, y = a[i]
    print(x,y)
    i +=1

i = 0
while i < len(a):
    j = 0
    while j < len(a[i]):
        print(a[i][j], end = ' ')
        j += 1
    print()
    i += 1
  • 반복문으로 1차원 리스트 만들기
a = []
for i in range(10):
    a.append(0) # append로 요소 추가
print(a)
  • 다양한 방식으로 2차원 리스트 만들기

a = []
for i in range(3):
    line =[] #안쪽 리스트로 사용할 빈 리스트 생성
    for j in range(2):
        line.append(0) #안쪽리스트에 0 추가
    a.append(line) #전체리스트에 안쪽리스트 추가
print(a)

print('리스트 표현식으로 2 차원 list만들기')

a = [[0 for j in range(2)]for i in range(3)]
print(a)

print('리스트자체 곱을 통한 2 차원 list만들기')
a = [[0]*2 for i in range(3)]
print(a)
  • 리스트 할당
a = [[10,20], [30,40]]
b = a
b[0][0] = 500
print(a)
print(b) #이렇게 할당을 하면 두개의 값이 모두 바뀜
  • copy
    카피만 할 경우 b의 값을 변경해주면 a,b 모두 변경된다
a =[[30,50],[60,80]]
b = a.copy()
b[0][0] =6060
print(a)
print(b)
  • deepcopy
    deepcopy를 이용하면 완전 새로운 list로 바뀌게 된다.
a = [[90,34],[70,40]]
import copy
b = copy.deepcopy(a)
b[0][0] =700
print(a)
print(b)
  • practice:3차원리스트만들기
a = [[[0for i in range(3)]for j in range(4)]for k in range(2)]
# 높이 세로 가로 크기로 3차원 리스트 생성된다.
a = [[[0for column in range(3)]for row in range(4)]for depth in range(2)]
print(a)

포맷팅(문자열서식지정등)

{}안에 지정해준 index에 맞춰 변수에 해당하는 값이 들어간다.

print('Hello, {0}'.format('world!'))
print("Hello, {0} {2} {1}".format('Python', "script", 3.6))
#brace안에 있는 숫자는 들어갈 인덱스를 지정하는것
#output ->Hello, Python 3.6 script
  • format 으로 문자열정렬하기
language = "Python"
version = 3.8
print(f'Hello, {language},{version}')


print('{0:<10}'.format('python'))#'{인덱스:<길이}'.format값
print('{0:>10}'.format('python'))
  • foramtting으로 숫자갯수를 정하여 출력하기
print('%03d'%1) # %0개수 d  % 숫자
print('{0:03d}'.format(35)) # 인덱스:0 개수 d
print('%08.2f' %3.6) #소수점 이하 갯수까지 포함해 8개가됨
print('{0:08.2f}'.format(150.37))
print('{0:0<10}'.format(15)) #'{인덱스:[[채우기]정렬][길이][.자릿수][자료형]}'
print('{0:0>10}'.format(15)) #길이 10 오른쪽 정렬 남은공간 0으로 채움
print('{0: >10}'.format(15)) # 남는공간 공백으로 채움.
print('{0:x>10}'.format(15)) #남는공간 x로 채우고 오른쪽 정렬
#천단위 콤마넣기
print(format(10000000,','))
  • 파일경로에서 파일명만 가져오기
    filename = path[path.rfine('\')+1:]
    #파일명은 항상 마지막에 있으므로 rfind를 사용해서 오른쪽에서 부터의 \를 찾는것이다.
    \ 다음이 파일명일 테니 +1 해주는것이다.
    나는 그냥 -1 index를 이용하여 가장 마지막 친구를 가져왔다.
path = 'C:\\Users\\dojang\\AppData\\Local\\Programs\\Python\\Python36-32\\python.exe'

x = path.split('\\')
filename = x[-1]

print(filename)

#python.exe

dictionary 키 쌍 값 추가하기

#setdefault:키-값 쌍 추가
#update: 키의 값 수정, 키가 없으면 키 쌍 값 추가

x = {'a':10,'b':20,'c':30,'d':40}
x.setdefault('e')
x.setdefault('f',100)
print(x)
x.update(a=100)
print(x)
x.update(g= 800)
print(x)
x.update(a=900, h = 324)
print(x)

update는 키가 문자열일때만 사용가능하며 숫자일경우는 dictionary를 이용해야한다.

y = {1: 'one', 2:'two'}
print(y)
y.update({1:'ONE', 3:'Three'})
print(y)
y.update([[2,'Two'], [4,"FOUR"]]) #리스트와 튜플을 이용하여 딕셔너리에 값추가
print(y)
y.update(zip([1,2], ['one','two'])) # zip을 이용하여 수정
print(y)
#setdefault는 키 값의 쌍만 추가할 수 있으며 이미 들어 있는 값을 바꾸려해도 안 바꿔짐

dictionary 값 제거의 다양한 방법

x = {'a':10, 'b':20, 'c':30, 'd':40}
x.pop('a') #a의 key&value를 제거함.
print(x)

x = {'a':10, 'b':20, 'c':30, 'd':40}
del x['a'] #a의 key&value를 제거함.
print(x)

x ={'a':10, 'b':20,'c':30,'d':40}
x.popitem() #오른쪽끝의 키값인 d:40 부터 제거된다.
print(x)

x ={'a':10, 'b':20,'c':30,'d':40}
x.clear()
print(x)
  • dictionary의 key,value를 가져오는 다양한 방법
  1. items: 키-값 쌍을 모두 가져옴
  2. keys: 키를 모두 가져옴
  3. values: 값을 모두 가져옴
x ={'a':10, 'b':20,'c':30,'d':40}
print(x.get('a')) #해당 key값 미존재시 0으로 값 반환
print(x.items())
print(x.keys())
print(x.values())

반복문을 이용한 dict 생성하기

  1. {키: 값 for 키, 값 in 딕셔너리}')
  2. dict({키: 값 for 키, 값 in 딕셔너리})
keys = ['a','b','c','d']
x = {key:value for key, value in dict.fromkeys(keys).items()}
print(x)

keys = ['a','b','c','d']
x = {key: 0 for key in dict.fromkeys(['a','b','c','d']).keys()}
print(x)

a = {'a':10, 'b':20, 'c':30, 'd':40}
x = {key: 0 for key in dict.fromkeys(a).keys()}
y = {value: 0 for value in a.values()}
print(x) # key를 value가 0인 dict로 가져와서 프린트
print(y) # value값이 key 이며 새로운 Value가 0인것인 dict로 프린트
z = {value: key for key, value in a.items()}
print(z) #key value 위치 바꿔서 출력

dictionary의 key값 제외하고 출력하기

x = {'a':10, 'b':20, 'c':30, 'd':40}

for key, value in x.items():
    if value == 20:
        del x[key]
print(x)
#이렇게 직접 삭제할 수가 없음 도중에 dict의 크기가 바뀌었다는 Error가 뜨기 때문

x = {key: value for key, value in x.items()if value != 20}
print(x)

집합(set)

a ={1,2,3,4}같은게 집합
dict와 같은 Brace를 쓰나 혼동하면 안된다.

a = set('apple')
print(a) #반복되는것은 사라지고 set이 생성됨
#print(a['l']) # 이렇게 따로 대괄호로 불러내지 못함.

집합의 다양한 연산 및 결합 ..

  • 합집합
a ={1,2,3,4}
b ={3,4,5,6}
print(a|b)
print(set.union(a,b))
#set.union() 또는 or연산자로 합집합(union)을 구할 수 있다.

합집합을 제외하고라도 부분집합 진부분집합 등 다루는 게 너무 많으나
이건 복습용 TIL작성이니 넘어가도록 해야겠다..
아래 두개는 코테에 자주나오는 공배수 공약수 문제이니 눈에 익힐 겸 적어 놓아야지
(조건문을 유의하며 보자)

  • 1~100까지 중 3과 5의 공배수를 세트형태로 출력하기
a ={i for i in range(1,101)if i%3 == 0}
b ={i for i in range(1,101)if i % 5 == 0}
print(a&b)
print(set.intersection(a,b))
  • 기입한 숫자의 최대공약수의 합을 출력하는 것
n, m = map(int, input().split())
a = {i for i in range(1,n+1,1) if n%i == 0}
b = {j for j in range(1,m+1,1) if m%j == 0}
print(a)
divisor = a & b

result = 0
if type(divisor) == set:
    result = sum(divisor)

print(result)

오늘까지 재미없지만 매우 중요한것을 배운 것 같다.
list의 활용법이나 dictionary,set의 다양한 작성법 등은
알고리즘문제 풀이를 찾다가도 이게 왜이렇지? 라면서 시간을 많이 보냈는데
아주 조금이나마 의문이 해소된것같아 기쁘다 ㅋ..

내일부터는 조금 재밌는걸 할 수 있으면 좋겠다 ..

끝!

profile
알고리즘 풀이를 담은 블로그입니다.

0개의 댓글