[PYTHON] 문법 복습

67193 단어 pythonpython

기본 입출력

## seq에 빈 문자열 저장하면, a와 b 두 변수 사이에 공백 없애고 붙여서 출력한다.
a = 12
b = 34 
print(a, b, sep='') 
1234
# end 인수는 자동 개행되는데,  end인수에 ''(빈문자열) 지정하면 공백 출력한다.
a = 12
b = 34 
print(a, end='') 
print(b)
1234
# sep은 내용사이에 구분자를, end는 문자열 마지막에 지정
print(12, 34, 56, sep='^^', end='-->')
print(78)
12^^34^^56-->78

진수

a = 0b1101
print(a)

print(hex(26))
print(oct(26))
print(bin(26))

# int는 10진수로 해석, 두 번째에 인수에 16진수를 주면 그 진법으로 해석
print(int("1a", 16)) 
print(int("15", 8))
# 26
# 13
13
0x1a
0o32
0b11010
26
13

문자열

# 검색
s = "python programming"
print(len(s)) 
print(s.find('o')) # 없으면 -1 출력
print(s.rfind('o'))
print(s.index('o')) # 없으면 예외 처리 해줘야 함
print(s.count('n'))
18
4
9
4
2
# 조사
name = "배고파"
if name.startswith('배'):
    print("배로 시작")
    
file = "bae.jpg"
if file.endswith(".jpg"):
    print("파일이다")
배로 시작
파일이다
모든 문자가 기준에 맞으면 True, 아님 False 반환

isalpha 모든문자가 알파벳인지
islower 모든문자가 소문자인지
isupper 모든문자가 대문자인지
isspace 모든문자가 공백인지
isalnum 모든문자가 숫자,알파벳인지
isdecimal 모든문자가 숫자인지
isdigit 모든문자가 숫자인지

# 변경
s = "Good morning. my love KIM"
print(s.lower()) 
print(s.upper())
print(s)
print(s.swapcase()) # 대소문자 뒤집기
print(s.capitalize()) # 문장의 첫글자만 대문자
print(s.title()) # 모든단어 처음 대문자
good morning. my love kim
GOOD MORNING. MY LOVE KIM
Good morning. my love KIM
gOOD MORNING. MY LOVE kim
Good morning. my love kim
Good Morning. My Love Kim
# 공백 제거
s = "   angel   "
print(s + "님")
print(s.lstrip() + "님")
print(s.rstrip() + "님")
print(s.strip() + "님")
   angel   님
angel   님
   angel님
angel님
# split : 구분자 기준으로 쪼개서 리스트로 반환
s = "짜장 짬뽕 탕슉"
print(s.split())
s2 = "서울->대전->부산"
city = s2.split("->")
print(city)
for c in city:
    print(c, "찍고", end=' ')
['짜장', '짬뽕', '탕슉']
['서울', '대전', '부산']
서울 찍고 대전 찍고 부산 찍고 
# join : 문자열의 각 문자 사이에 다른 문자열 끼운다.
s = "--"
print(s.join("대한민국"))
print()

a = ['a', 'b', 'c', 'd', '1', '2', '3']
result1 = "".join(a)
print(result1)
print()

s = ['BlockDMask', 'python', 'join', 'example']
print(s)
result2 = ".".join(s)
print(result2)
result = ".\n".join(s)
print(result)
대--한--민--국

abcd123

['BlockDMask', 'python', 'join', 'example']
BlockDMask.python.join.example
BlockDMask.
python.
join.
example
# 대체
s = "아버지가 가방에 들어가신다"
print(s)
print(s.replace("아버지", "가방"))
아버지가 가방에 들어가신다
가방가 가방에 들어가신다
# 포맷팅
month = 8
day = 15
anni = "광복절"
print("%d월 %d일은 %s이다" %(month, day, anni))
8월 15일은 광복절이다
### 컴프리헨션
# 두개의 반복문
a = ['a', 'b', 'c']
b = ['1', '2', '3']
s = [i + j for i in a for j in b]
print(s)

# 두 개의 조건문
r = [i for i in range(50) if i %2 ==0 if i%3 ==0]
print(r)

# 조건문에서 else 사용
t = ['even' if i%2 ==0 else 'odd' for i in range(10)]
print(t)

d = [ x+y for x in range(10) for y in range(10) ]
print(d)
d2 = { x+y for x in range(10) for y in range(10) }
print(d2)
['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
[0, 6, 12, 18, 24, 30, 36, 42, 48]
['even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}

리스트

# 리스트 요소 일괄 변경 가능?
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
nums[2:5] = []
del nums[4]
print(nums) 
# [0, 1, 5, 6, 8, 9]
[0, 1, 5, 6, 8, 9]
# 삽입
nums = [1, 2, 3, 4]
nums.insert(2, 99)
print(nums)

nums = [1, 2, 3, 4]
nums[2:2] = [90, 91, 92] # 1)  범위에 대한 대입 -> 삽입
print(nums) 
nums = [1, 2, 3, 4]
nums[2] = [90, 91, 92] # 2)  요소에 대한 대입 -> 대체
print(nums)
[1, 2, 99, 3, 4]
[1, 2, 90, 91, 92, 3, 4]
[1, 2, [90, 91, 92], 4]
[1, 2, 3, 4, 5, 10, 11]
[1, 2, 3, 4, 5, 10, 11]
[1, 2, 3, 4, 5, 10, 11, [10, 11]]
# 병합
list1 = [1, 2, 3, 4, 5]
list2 = [10, 11]
list3 = list1 + list2
print(list3) #1)

list1.extend(list2)
print(list1) #2)

list1.append(list2)
print(list1)
[1, 2, 3, 4, 5, 10, 11]
[1, 2, 3, 4, 5, 10, 11]
[1, 2, 3, 4, 5, 10, 11, [10, 11]]
# 삭제
score = [50, 60, 70, 80, 100]
score.remove(100)
print(score)
#del(score[2]) 
del score[2]
print(score)
score[1:3] = []
print(score)
[50, 60, 70, 80]
[50, 60, 80]
[50]
# 검색
score = [88, 95, 70, 100, 99]
perfect = score.index(100)
print(perfect)
pernum = score.count(100)
print(pernum)
# 정렬
country = ["Korea", "japan", "america"]
country.sort()
print(country)
country.sort(key=str.lower) 
print(country)
# 대소문자 무시하고 비교하려면 잠깐 소문자로 바꾼 후 비교, 비교할 때만 바뀌는 것이지 요소가 바뀌는 것은 아니다.
['Korea', 'america', 'japan']
['america', 'japan', 'Korea']

튜플

# 요소 변경이나 삭제는 불가능,
# 요소 읽기, 범위 추출하여 잘라내기, + 연산자로 튜플 연결, * 연산자로 튜플 요소 반복 가능
tu = 1, 2, 3, 4, 5
print(tu[3])
print(tu[1:4])
print(tu + (6, 7))
print(tu *2)
4
(2, 3, 4)
(1, 2, 3, 4, 5, 6, 7)
(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
score = [1, 5, 2, 3, 4]
tu = tuple(score)
print(tu)
li = list(tu)
print(li)
(1, 5, 2, 3, 4)
[1, 5, 2, 3, 4]

딕셔너리

# 찾는 키가 없으면 예외 발생하는데, 이때 get메서드
'''
for a in participant:
    result[a] = result.get(a,0) + 1
'''
dic = {'boy': '소년', 'school': '학교', 'book': '책'}
print(dic['boy'])
print(dic.get('stu'))
print(dic.get('stu', '사전에 없는 단어'))
소년
None
사전에 없는 단어
# 실행 중 삽입 삭제 수정 가능
dic = {'boy': '소년', 'school':'학교', 'book':'책'}
dic['boy'] = '남자아이'
dic['girl']= '소녀'
del dic['book']
print(dic)
{'boy': '남자아이', 'school': '학교', 'girl': '소녀'}
dic = {'boy': '소년', 'school':'학교', 'book':'책'}
print(dic.keys()) # 객체를 리턴한다. 이것을 리스틀 바꾸고 싶다면 아래
print(dic.values())
print(dic.items())
keylist = list(dic.keys())
print(keylist)
dict_keys(['boy', 'school', 'book'])
dict_values(['소년', '학교', '책'])
dict_items([('boy', '소년'), ('school', '학교'), ('book', '책')])
['boy', 'school', 'book']
# 2차원 린스트 사전으로 변환
li = [['boy', '소년'], ['girl', '소녀']]
dic = dict(li)
print(dic)
{'boy': '소년', 'girl': '소녀'}
# 활용
song = "by the rivers of babylon.."
alphabet = dict()
for c in song:
    if c.isalpha() == False:
        continue
    c= c.lower()
    if c not in alphabet:
        alphabet[c] =1
    else:
        alphabet[c] += 1
print(alphabet)
# {'b': 3, 'y': 2, 't': 1, 'h': 1, 'e': 2, 'r': 2, 'i': 1, 'v': 1, 's': 1, 'o': 2, 'f': 1, 'a': 1, 'l': 1, 'n': 1}

# 방법 1. 키의 목록을 구해 정렬 
key= list(alphabet.keys())
key.sort()
for c in key:
    num = alphabet[c]
    print(c, "=>", num)
{'b': 3, 'y': 2, 't': 1, 'h': 1, 'e': 2, 'r': 2, 'i': 1, 'v': 1, 's': 1, 'o': 2, 'f': 1, 'a': 1, 'l': 1, 'n': 1}
a => 1
b => 3
e => 2
f => 1
h => 1
i => 1
l => 1
n => 1
o => 2
r => 2
s => 1
t => 1
v => 1
y => 2

딕셔너리 정렬

d = {'b': 3, 'y': 2, 't': 1, 'h': 1, 'e': 2, 'r': 2, 'i': 1, 'v': 1, 's': 1, 'o': 2, 'f': 1, 'a': 1}

# 1. sorted 정렬 :  key를 오름차순
print(sorted(d))

# 2. value값 기준으로 정렬
d2 = sorted(d, key= lambda x : x[0])
print(d2)

# 3.  items()를 이용한 정렬
# items() -> {"key" : value}의 형태를 [(key, value)]
d3 =  sorted(d.items(), key=lambda x : x[1] , reverse=True)
print(d3)
['a', 'b', 'e', 'f', 'h', 'i', 'o', 'r', 's', 't', 'v', 'y']
['a', 'b', 'e', 'f', 'h', 'i', 'o', 'r', 's', 't', 'v', 'y']
[('b', 3), ('y', 2), ('e', 2), ('r', 2), ('o', 2), ('t', 1), ('h', 1), ('i', 1), ('v', 1), ('s', 1), ('f', 1), ('a', 1)]

집합

asia = {'korea', 'japan'}
asia.add('vietnam')
asia.remove('japan')
print(asia)

asia.update({'singapre'})
print(asia)
{'vietnam', 'korea'}
{'vietnam', 'singapre', 'korea'}
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7}
print("합집합", s1|s2)
print("합집합",s2.union(s1))
print("교집합", s1&s2)
print("교집합",s2.intersection(s1))
print("차집합", s1-s2)
print("차집합",s2.difference(s1))
print("배타적차집합", s1^s2) # 한쪽 집합에만 있는 원소의 합
합집합 {1, 2, 3, 4, 5, 6, 7}
합집합 {1, 2, 3, 4, 5, 6, 7}
교집합 {4, 5}
교집합 {4, 5}
차집합 {1, 2, 3}
차집합 {6, 7}
배타적차집합 {1, 2, 3, 6, 7}

추가 내용

map

리스트의 요소를 지정된 함수로 처리
여러개의 데이터를 한번에 다른 형태로 바꿀 때 사용

# 문자열 리스트릀 숫자 리스트로 바꾸기
a = ["12","23","324","42"]
a = list(map(int, a))
print(a)
[12, 23, 324, 42]

순열과 조합

from itertools import combinations, permutations
arr = ['A', 'B', 'C']
p = permutations(arr,2)
print(list(p))

c = combinations(arr,2)
print(list(c))
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
[('A', 'B'), ('A', 'C'), ('B', 'C')]

zip

numbers = [1,2,3]
letters = ["A", "B", "C"]
for pair in zip(numbers, letters):
    print(pair)
print('---')   

for i in range(3):
    pair = (numbers[i], letters[i])
    print(pair)
print('---')

for number, upper, lower in zip("12345", "ABCDE", "abcde"):
    print(number, upper, lower)
    
print('---')    
pairs = list(zip(numbers, letters))
print(pairs)

print('---')
keys = [1,2,3]
values = ["A", "B", "C"]
print(dict(zip(keys, values)))
(1, 'A')
(2, 'B')
(3, 'C')
---
(1, 'A')
(2, 'B')
(3, 'C')
---
1 A a
2 B b
3 C c
4 D d
5 E e
---
[(1, 'A'), (2, 'B'), (3, 'C')]
---
{1: 'A', 2: 'B', 3: 'C'}

deque()

from collections import deque

deq = deque()

# 앞에 원소 추가
deq.appendleft(10)

# 끝에 원소 추가
deq.append(0)

# 앞에 원소 삭제
deq.popleft()

# 뒤 원소 삭제
deq.pop()

인접행렬과 인접리스트

n = 4
e = 5
nodes = [[1, 2], [1, 3], [1, 4], [2, 3], [3, 4]]

adj = [[0 for _ in range(n)] for _ in range(n)]

for src, dst in nodes:
    adj[src-1][dst-1] = 1
    adj[dst-1][src-1] = 1
print(adj)
    

adj1 = [[] for _ in range(n)]

for src, dst in nodes:
    adj1[src-1].append(dst-1)
    adj1[dst-1].append(src-1)
print(adj1)
[[0, 1, 1, 1], [1, 0, 1, 0], [1, 1, 0, 1], [1, 0, 1, 0]]
[[1, 2, 3], [0, 2], [0, 1, 3], [0, 2]]

좋은 웹페이지 즐겨찾기