[Python] 기초 복습 2

Monad·2021년 9월 25일
0

Python 기초 복습

목록 보기
2/2

※ 개인 공부기록을 위한 TIL 로그입니다,,,

참고: 코드업 Python 기초 100제 (빠른 시간에 기초 확인하기에 좋은 것 같다) + 내가 개인적으로 공부하다가 메모해둔 것들


map()

map()은 map객체 타입을 반환하므로 list형에 대입시 list()로 감싸 convert 해줘야 함

arr = list(map(int,input().split()))

global keyword

함수 밖 scope의 전역변수를 함수 안에서 사용하려면, global 키워드를 사용해 선언해주어야 함

g = 0
def foo():
    global g

List Comprehension

아래와 같은 방법으로 리스트를 선언할 수 있다. (for, if 사용)
보통 2차원 리스트 선언 시 많이 쓰임.

arr = [[0]*10 for _ in range(10)]
arr2 = [list(map(int,input().split())) for _ in range(n)]
arr3 = [x for x in range(1, 10+1) if x % 2 == 0]
arr4 = [ x for x in range(10) if x < 5 if x % 2 == 0 ]

in, not in

파이썬에서 제공하는 포함 연산자( in, not in )
객체 in (not in) 시퀀스의 형태로 사용 가능 (문자열, 리스트, 튜플, 딕셔너리)

if 'p' in 'python':
    print(True)

else:
    print(False)

--> 이 링크 참고

표준 입력

input()은 속도가 다소 느리기에, 대량의 데이터를 입력받을 때는 sys.stdin.readline() 을 이용하는 것이 좋음. ( 이유는 모르고 그렇구나~ 했었지만 서치하다보니 누가 설명을 해줬다 -> 참고 )

sys.stdin.readline() 은 input()과 같이 한 라인을 입력받지만, 개행문자와 공백까지 끝에 포함이 되기 때문에 rstrip()까지 해주도록 해야 한다.

import sys
data = sys.stdin.readline().rstrip()

range()

range()
range(시작,)
range(시작,, 증감) #증감이 -1이면 거꾸로 내려옴

reverse, reversed의 차이

우선 리스트를 뒤집는 가장 쉬운 방법은 슬라이싱을 이용하는 것임 (l[::-1]

close = [1,2,3,4,5]
reversed_close = close[::-1]
  1. reverse는 list가 제공하는 함수.
    값을 반환하지 않고, 단순히 해당 list를 뒤집음
  2. reversed는 내장함수.
    reversed 객체를 반환함. 따라서 리스트 등으로 사용시 list(), tuple() 등으로 감싸 convert 해줘야 함.
    문자열로 만들려면 리스트 변환 없이 .join()으로 바로 문자열로 생성하면 됨.

--> 이 링크 참고

l = ['a', 'b', 'c']
l.reverse()
print(l)  # ['c', 'b', 'a']

l = ['a', 'b', 'c']
list(reversed(l))  # ['c', 'b', 'a']

python에는 switch문이 없다. do while 문도 없다.

3항 연산

python에서는 3항 연산을 (?:)가 아니라 아래와 같이 표현함.

c = a if (조건문) else b
print(a if a>b else b)

dictionary의 get()

c  = input()
d = {
'A':'best!!!',
'B':'good!!',
'C':'run!',
'D':'slowly~'
}
print(d.get(c,'what?'))  # dic.get(a,b) -> dic에서 a의 value를 반환하되
			 # a에 해당하는 key가 없으면 b를 반환

비트단위 or, xor 연산

비트단위 or연산 - a | b
비트단위 xor연산 - a ^ b

filter()

filter(a,b) -> 리스트 b에 대해, a(함수)에 해당하는 항목만 필터링해주는 함수.
a에는 lambda가 잘 사용됨.
filter 역시 filter객체를 반환하므로 list()로 감싸 convert해야 한다.

# n까지 3,6,9게임하는 코드...
n = int(input())

for i in range(1,n+1):
    c = len(list(filter(lambda x: int(x) == 3 or int(x) == 6 or int(x) == 9, str(i))))
    if c > 0:
        print('X'*c, end = ' ')
    else:
        print(i, end = ' ')

16진수 입/출력 활용

# 16진수 구구단 출력하는 코드...
n = int(input(), 16)  # 입력받은 문자를 16진수로 인식하여 정수 변환
for i in range(1, 17):
    print('%X'%n, '*%X'%i, '=%X'%(n*i), sep='') 

# B 입력 시 결과 ---
# B*1=B
# B*2=16
# B*3=21
# B*4=2C
# B*5=37
# B*6=42
# B*7=4D
# B*8=58
# B*9=63
# B*A=6E
# B*B=79
# B*C=84
# B*D=8F
# B*E=9A
# B*F=A5
# B*10=B0

find()

문자열에서 인자로 들어온 문자가 있는 인덱스를 찾아 반환하고, 없을 경우 -1을 리턴함.
** 문자열에만 사용할 수 있음!

a = 'hello'
a.find('o'))  #4
a.find('o', 1, 3)  #-1
# 두번째 인자 - 시작위치
# 세번째 인자 - 끝위치

index()

find()와 비슷하지만, 문자열/리스트/튜플에 사용할 수 있고, 해당하는 값이 없을 경우 ValueError가 발생한다는 점이 다름.

a = 'hello'
a.index('o'))  #4
a.index('o', 1, 3)  #ValueError
# 두번째 인자 - 시작위치
# 세번째 인자 - 끝위치

for-else

python에서는 for-else 용법을 지원하는데,
for문이 중간에 break되지 않고 끝까지 수행되었을 때, else문의 내용이 실행되는 용법이다.

profile
👩‍💻🛹🏃‍♀️⛵🎾 바쁘다 바빠

0개의 댓글