파이썬 기초문법

1. 키워드(Keyword)

  • 파이썬에서 이미 예약되어 있는 문자열로서 다른 용도로 사용이 불가능한 문자열이다.
  • 키워드는 예약어를 포함한다.
  • False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield

2. 예약어(Reserved Words)

  • 예약어는 모두 30개이다.
  • 예약어는 상수 또는 변수나 다른 식별자의 이름올 사용할 수 없다.
  • 예약어는 모두 소문자이다.
  • 예약어 목록
    • and, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield

3. 변수(Variable)

  • 변수는 실행중(runtime에) 값이 변하는 단어들에게 붙여준 별명을 말한다.
  • 알파벳이나 _로 시작하며, 숫자를 사용할 수 있음 다. 예시) item, _set_list

4. 상수(Constant)

  • 상수는 변하지 않는 값을 저장해 둔 단어의 별명을 말한다.
  • 주로 모두 대문자 알파벳으로 지정한다.
  • 예시) PI, INTEREST, WIDTH

5. 리터럴(Literal)

  • 리터럴은 값 그 자체로, 고정된 값을 표현하는 것을 의미한다.
  • 숫자, 문자, 논리값, 특수, 컬렉션 리터럴이 있다.
  • 특히 문자 리터럴은 큰따옴표(“) 세 개나 한 개나 작은 따옴표(‘) 한 개로 둘러 싸인 값을 말한다.
  • 예시) ”World“, ’dry’, ”“”hello world“”“ 등

1. 연산자

하나 이상의 피연산자를 입력 받아 특정 연산을 하는 것

산술 연산자

(a=30, b=7을 가정)

연산자의미예시결과

+ 덧셈 a + b 37
- 뺄셈 a - b 22
* 곱셈 a * b 210
/ 나눗셈(float) a / b 4.38571428571
% 나머지 a % b 2
// a // b 4
** 제곱 a ** 2 900

비교 연산자

연산자의미예시결과

== 같음 3 == 5 False
!= 다름 'hi' != 'hello' True
> 크다 12 > 12 False
< 작다 13 < 11 False
>= 이상 15 >= 15 True
<= 이하 -3 <= 12 True

할당 연산자

(a = 7, b = 3라고 가정)

연산자의미예시a 값

= 좌항에 우항 값을 할당 a = b 3
+= 좌항과 우항을 더하고 좌항에 할당 a += b 10
-= 좌항에서 우항을 빼고 좌항에 할당 a -= b 4
*= 좌항과 우항을 곱하고 좌항에 할당 a *= b 21
/= 좌항에서 우항을 나누고 좌항에 할당 a /= b 2.333333333333
%= 좌항에서 우항을 나눈 나머지를 좌항에 할당 a %= b 1
**= 좌항에서 우항 제곱을 한 값을 좌항에 할당 a **= b 343
//= 좌항에서 우항을 나눈 몫을 좌항에 할당 a //= b 2

비트 연산자

(a = 5 (00101), b = 3(00011)이라고 가정)

연산자의미예시결과

& 비트 AND, 두 비트 모두 1이어야 1 a & b 1(00001)
| 비트 OR, 두 비트 중 하나만 1이어도 1 a | b 7(00111)
^ 비트 XOR, 두 비트가 다르면 1 a ^ b 6(00110)
~ 비트NOT, 1의 보수 연산(단항 연산자) ~a -6(11010)
<< 좌항을 좌측으로 우항만큼 비트 시프트(*2) a << 1 10(01010)
>> 좌항을 우측으로 우항만큼 비트 시프트(//2) a >> 1 2(00010)

논리 연산자

연산자의미ab예시결과

and 논리 AND 4 6 (a == 4) and (b == 6) True
or 논리 OR 2 10 (a != 2) or (b == 5) False
not 논리 NOT 3 0 not(a == 3) False

멤버 연산자

(a = [1,2,3,4,5])

연산자의미예시결과

in 우항 iterable에 좌항이 포함되어 있다 4 in b True
not in 우항 iterable에 좌항이 포함되지 않는다 4 not in b False

식별 연산자

(a = [1,2,3], b = a, c = a.copy())

연산자의미예시결과

is 좌항과 우항의 메모리 주소가 같다 a is c False
is not 좌항과 우항의 메모리 주소가 다르다 b is not b True

연산자 우선순위

연산자는 우선순위에 따라 계산 된다.

연산자의미예시결과

is 좌항과 우항의 메모리 주소가 같다 a is c False
is not 좌항과 우항의 메모리 주소가 다르다 b is not b True

2. 식

  • 연산자, 피연산자, 리턴값으로 구성된 문항
  • 리턴 타입에 따라 부울식, 산술식 등으로 나뉜다.

3. 피연산자

  • 연산자에 들어가는 입력 값. 식, 함수, 변수, 상수, 리터럴 등이 될 수 있다.

 

0. 블록(block)

파이썬에서 중첩 코드 블록은 다른 언어들과는 다르게 들여쓰기(indentation)으로 구분한다. 한 들여쓰기 당 하나의 레벨의 블록으로 구분한다.

if id == 'admin': print("welcome!")

1. if 문

if문이란 if문에 오는 조건식의 결과가 True이면 if문 안에 있는 내용을 실행하고 elif나 else는 무시하고 다음으로 넘어간다. if 조건에 만족하지 않으면 else가 나올 때까지 elif의 조건을 확인하고 True이면 해당 elif를 실행, False이면 넘어간다.

다른 언어와의 차이점은 else if를 줄여 elif로 표현한다는 점이다.

age = int(input("당신의 나이는?")) if age < 20: # 첫 if문에서 age가 20보다 작으면 아래 코드를 실행 print("미성년자 입니다. 술을 마실 수 없습니다.") elif age == 20: # 다음 elif문에서 age가 20이면 아래 코드를 실행 print("이번 년도에 성인이 됐군요. 술을 진탕 마시세요!") else: # 위의 조건들과 하나도 부합하지 않으면 다음 코드를 실행 print("성인입니다. 술을 마실 수 있습니다.")

2. while 문

while문에 있는 조건식이 True이면 코드 블록 안의 내용을 실행하고 다시 조건식을 연산했을 때 결과 값이 False일 때까지 실행한다. 주의해야할 점은 while의 조건식을 잘못 설정할 경우에는 무한 루프에 빠질 수 있다.

a = 0 while a < 10: print(a) a += 2 # 0, 2, 4, 6, 8 출력

3. break 문

break문을 만나면 반복문 블록을 탈출한다.

a = 1 while True: print(a) if a > 5: break a += 1 # 1, 2, 3, 4, 5 출력

4. continue 문

컨티뉴 문을 만나면 반복문의 뒤의 내용을 무시하고 반복문의 다음 스텝으로 넘어간다.

i = 0 while i != 10: i += 1 if i % 2 == 0: continue print(i) # 1, 3, 5, 7, 9 출력

 


 

for문

특정 조건을 만족할 때까지 변수를 늘리거나 줄여가며 진행하는 반복문

python은 다른 언어와 다르게 in과 range()를 써서 조건을 지정한다.

for i in range(end)

end = 2 for i in range(end): print(i) # 0 # 1 # 2

  • [변수 i]가 [정수 end]보다 작을 동안 반복 내용을 실행하고,
  • [변수 i]는 0부터 시작하며,
  • 한 블록이 끝날 때 마다 [변수 i]를 1씩 증가시킨다.

for i in range(start, end)

start, end = 3, 6 for k in range(start, end): print(k) # 3 # 4 # 5

  • 변수를 start부터 시작하여 end - 1까지 증가시키며 반복내용을 실행한다.

for i in range(start, end, step)

start, end, step = 4, 10, 2 for i in range(start, end, step): print(i) # 4 # 6 # 8

  • [변수]를 start부터 시작하여 end - 1까지 step 간격으로 증가시킨다.

for [변수] in [enumerate]

name = "Jin Kwon" for s in name: print(s, end=' ') # J i n K w o n

  • 연속된 순서를 갖는 enumerate 객체 안에 있는 객체들을 하나씩 꺼내서 [변수] 안에 차례로 넣는다. (다른 언어의 for each문과 동일)

[변수]는 1개 이상 넣을 수 있다.

for i, j in zip(range(1, 5), range(3, 11, 2)): print(i, j) # 1 3 # 2 5 # 3 7 # 4 9

  • enumerate는 zip()으로 묶어서 표현할 수 있다. zip의 인자들의 길이는 같아야 한다

for else문

for문이 중간에 break 되지 않고 끝나게 된다면 else문을 실행한다.

arr = [1, 11, 2, 5] for i in arr: print(i) else: print("ended with no break!") # 1 # 11 # 2 # 5 # ended with no break!

 


 

함수

정의

중복된 부분들을 자동화하기 위해 만든 기능으로 입력값과 출력값을 갖는 동작의 블록을 말한다.

def fun_name(par1, par2): (동작 내용) return something

리턴 타입

파이썬은 동적 타이핑 언어이므로 함수의 리턴 타입을 따로 지정하지 않고 def 키워드를 사용한다. void형의 함수는 return 키워드를 쓰지 않으면 알아서 아무것도 리턴 안 한다.

# 파라미터 값에 따라서 함수 bar의 리턴타입이 float() 또는 int()가 된다. def bar(b_var): f_var = 1.2 i_var = 2 return f_var if b_var else i_var def return_nothing(a): a += 1

파라미터

파라미터(인수 / 입력값)은 함수이름 뒤에 소괄호( ()) 안에 타입명 없이 쉼표(,)로 구분하여 넣는다. 하나 이상의 값을 리턴할 수 있다.

# tuple() 타입 값을 리턴한다 def foo(a, b): return a + 1, b - 1 a, b = foo(a, b)

디폴트 파라미터

파라미터의 기본값은 parm_name=value 형식으로 지정할 수 있다. 디폴트 파라미터는 모든 파라미터의 뒤에 선언해야 한다.

def person(name, age, location=“Korea“): print(name, end=' ') print(age, end=' ') print(location) person("현욱", 21) # 현욱 21 Korea

*args, **kwargs

파이썬은 동적으로 인자를 받을 수 있다. *args는 순서대로 인자를 받아 args라는 이름의 리스트에 순서대로 넣어서 args[index] 형태로 호출 할 수 있다.

def printer(name, *args): print(name, end=,) for i in range(len(args)): print(args[i], end=" ") printer("정연", 23, 168, 52, "서울") # 정연, 23 168 52 서울

**kwargs는 dic()타입의 가변 개수 인수를 받을 수 있다.

def foo(**kwargs): kw in kwargs: print(kw +:+ kwargs[kw]) foo(item="bow", attack=23, level=12, rate=[1, 4, 5, 3]) # item: bow # attack: 23 # level: 12 # rate: [1, 4, 5, 3]

람다 표현식

람다는 이름 없는 함수를 만드는데 사용된다.

plus_ten = lambda x: x + 10 plus_ten(5) # 15

 


 

1. 모듈이란

모듈은 같은 특성을 갖는 클래스와 메소드(함수)와 상수를 모아놓은 하나의 파일을 말한다.

2. 모듈의 호출

module_name.py 형태의 파일로 저장하며, 다른 파일에서는 아래와 같이 호출하여 쓸 수 있다.

import module_name # module_name 모듈을 호출한다. import module_name as mn # module_name 모듈을 mn 이란 별명으로 호출한다. from module_name import ClassName # module_name 모듈 안에 있는 ClassName이란 클래스를 호출한다. from module_name import method_name # module_name 모둘 안의 method_name이란 메소드를 호출한다. import module_name.ClassName # module_name 모듈 안의 ClassName 클래스를 호출한다.

3. 모듈의 제작

간단한 수학 계산을 하는 my_math.py 모듈을 만들어 봤다.

# my_math.py pi = 3.14 def avg(*items): """입력 값의 평균을 구하는 메소드 list()타입의 단일 파라미터를 받으면 리스트의 평균을 구함 여러 개의 int() 타입의 파라미터를 받으면 모든 파라미터의 평균을 구함""" if type(items[0]) == list: return sum(items[0]) / len(items[0]) else: return sum(items) / len(items) def get_digit(num): """입력 숫자의 자리수를 구하는 메소드""" digit = 0 if num > 0: while num != 0: num //= 10 digit += 1 else: digit = -1 return digit def radian_to_degree(rad): """라디언을 각도로 변형하는 메소드""" return rad * 180 / pi def degree_to_radian(deg): """각도를 라디언으로 변형하는 메소드""" return deg * pi / 180

다음은 메인 코드이다. 다음과 같이 모듈을 사용할 수 있다.

# main.py import my_math as mm # my_math 모듈을 mm이란 별명으로 불러온다 l = [i for i in range(5, 101, 5)] # 5 ~ 101 사이의 5의 배수를 원소로 갖는 리스트 l을 만든다 print(l) # l의 내용을 출력 print(sum(l), end=' / ') # 내장 메소드 sum()을 사용하여 l의 합을 구함 print(len(l), end=' = ') # 내장 메소드 len()을 사용하여 l의 원소의 개수를 구함 print(mm.avg(l)) # my_math 모듈의 avg() 메소드를 사용하여 리스트 l의 평균을 구함 # 리스트 l의 각 원소들과 자리수를 구함 for i in l: print(" " * (3 - mm.get_digit(i)) + str(i) + " : " + str(mm.get_digit(i)) + "자리") print("1 rad = " + str(mm.radian_to_degree(1))) # 1라디안이 몇도인지 구함 print("1 deg = " + str(mm.degree_to_radian(1))) # 1도가 몇 라디안인지 구함

main을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

 


 

데이터 구조

데이터 구조란 데이터를 효율적으로 나타내기 위한 특정 데이터 타입을 말한다. list(), tuple(), dict(), set() 등 많음

리스트(List; list())

  • 여러 데이터를 순서대로 나열한 데이터 구조이다.
  • 리스트는 변형 가능한(muttable) 데이터 구조임
  • 다른 언어의 배열과 비슷하지만 다름
  • 리스트의 원소는 같은 타입일 필요는 없다.
  • 0 ~ length – 1의 인덱스로 접근 가능하다. ex) list_name[index]
  • list1 + list2는 list1 뒤에 list2가 붙은 리스트가 리턴 된다.

메소드

  • list.append(value) : list의 맨 뒤에 value 원소를 추가한다.
  • list.insert(index, value) : list[index]에 value를 넣고 원래 있던 원소들을 뒤로 민다.
  • list.index(x[, start[, end]]) : list에 있는 원소 중 x와 같은 값을 가지고 있는 항목 중 가장 첫번째 인덱스를 리턴한다. start와 end 인수를 사용하여 찾는 범위를 지정할 수 있다.
  • list.pop([i]) : list의 i번째 값을 삭제하고 그 값을 리턴한다. i를 지정하지 않으면 가장 마지막 값을 삭제하고 리턴한다.
  • list.reverse() : list를 역순으로 변경한다.

_list = [1, 2, 3] _list.append(12) # [1, 2, 3, 12] _list.insert(1, 6) # 첫번째가 아닌 인덱스 1에 추가한다. [1, 6, 2, 3, 12] k = _list.pop(0) # k == 12, _list == [6, 2, 3, 12] _list.reverse() # _list = [12, 3, 2, 6] for i in _list: print(i, end=' ') # 12 3 2 6

튜플(Tuple; tuple())

  • 튜플은 변형 불가능한(immutable) 데이터 구조다. -> 수정할 수 없음
  • 리스트와 비슷하게 여러 데이터를 순서대로 나열한 데이터 구조이다.
  • 리스트의 원소는 같은 타입일 필요는 없다.
  • 인덱스로 접근 가능하다.

메소드

  • tuple.count(value) : tuple 안에서 value의 개수를 구함
  • tuple.index(i) : tuple의 i번째 인덱스 값을 리턴함

t = tuple() t = (1, 4, 2, 5, 1) t.append(1) # AttributeError: 'tuple' object has no attribute 'append' t.count(1) # 파라미터 value의 개수를 구함 -> 2 t.index(2) # 3 for i in t: print(i, end=' ') # 1 4 2 5 1

딕셔너리(Dictionary; dict())

  • key-value로 연결 되어 있는 데이터 구조이다.
  • dict_name[key]로 value값을 조회 가능하다.
  • key 값은 string, int, float이 들어갈 수 있다.
  • for문으로 iterable 하게 조회 가능하다.
  • key는 중복될 수 없다.

메소드

  • clear() : 딕셔너리 객체를 비움 (dic = {}와 같음)
  • copy() : 딕셔너리 객체를 복사함 (dic = dic[:]와 같음)
  • get(key) : 딕셔너리에서 key라는 키의 value를 리턴함 (dic[key]와 같음)
  • items() : 각 (key, value) 형태의 튜플의 리스트를 리턴함
  • keys() : 딕셔너리 안에 있는 key들을 리스트 형태로 리턴함
  • pop(i) : 인덱스 i의 값을 삭제하고 리턴함
  • values() : 딕셔너리 안에 있는 value들을 리스트 형태로 리턴함

dic = {1 : 3, 2 : 14, "ite" : "val"} d = dic.copy() print(d) # {1 : 3, 2 : 14, "ite" : "val"} d.clear() print(d) # {} print(dic.get("ite")) # "val" print(dic.keys()) # dict_key([1, 2, "ite"]) print(dic.values()) # dict_values([3, 14, "val"]) for i in dic: print(i, dic[i]) # i는 key, dic[i]는 key i에 대한 value가 리턴됨

 


 

파이썬 표준 라이브러리

파이썬에서는 기본 기능들 이외에도 프로그래밍하는데 필요한 클래스, 메소드, 상수들을 모듈로 지원하는데 이를 “표준라이브러리(Standard Library)”라고 한다. 파이썬 표준 라이브러리는 엄청나게 양이 많으니 자세한 정보는 https://docs.python.org/3/library/ 를 참고하면 됨. 오늘은 그 중에서 많이 쓰이는 math, random, datetime 라이브러리들에 대해 알아보겠다.

math

이름에서 직관적으로 알 수 있듯이 수학에 관련된 라이브러리다. 삼각함수, 지수, 로지스틱 함수, 대수 관련 기능들이 많이 있다.

  • math.ceil(x) : x를 올림하여 정수로 리턴한다.
  • math.fabs(x) : x의 절대값을 실수로 리턴한다.
  • math.floor(x) : x를 내림하여 정수로 리턴한다.
  • math.gcd(a, b) : 정수 a와 b의 최대공약수를 정수로 리턴한다.
  • math.log(x[, base]) : base를 밑으로 하는 x의 로그를 구한다. base는 없으면 자연상수 e로 함
  • math.log10(x) : 밑을 10으로 하는 로그를 구함
  • math.sqrt(x) : x의 제곱근을 구함

import math math.ceil(12.5) # 13 math.floor(1.3) # 1 math.fabs(-151) # 151.0 math.gcd(120, 42) # 6 math.log(8, 2) # 3.0 math.log10(100) # 2.0 math.sqrt(122) # 11.045361017187261

datetime

날짜와 시간을 다루는 라이브러리이다.

date : 날짜에 관련된 클래스

  • date(year, month, day)로 선언 가능
  • date.today() : 오늘 날짜 나옴
  • date() -/+ date()하면 timedelta()타입의 값 나옴
  • date.year : 해당 객체의 년도 출력, 1~9999
  • date.month : 해당 객체의 월 출력, range(1, 12)
  • date.day : 해당 객체의 일 출력, 1~해당 월의 말일

from datetime import date as d a = d.today() # datetime.date(2019, 11, 6) b = d(2019, 10, 16) # datetime.date(2019, 10, 16) a.year # 2019 a.month # 11 a.day # 6 a - b # datetime.timedelta(days=21)

time : 시간에 관련된 클래스

  • time(hour, min, sec, milsec)로 선언 가능 빈 값은 0으로 초기화
  • time.hour : 해당 객체의 시간 출력, range(24)
  • time.minute : 해당 객체의 분 출력, range(60)
  • time.second : 해당 객체의 초 출력, range(60)
  • time.microsecond : 해당 객체의 밀리초 출력, range(1000000)

from datetime import time as t a = t(19, 23, 13) # datetime.time(19, 23, 13) b = t(11, 10, 16) # datetime.time(11, 10, 16) a.hour # 19 a.minute # 23 a.second # 13 a.microsecond # 0 a > b # True

datetime : 날짜와 시간에 관련된 클래스

  • datetime.today() : 현재 날짜, 시간이 나옴 (datetime.now()와 같은 결과)
  • datetime.weekday() : 요일 정보를 숫자로 출력함 (일: 0, 월: 1, 화: 2, 수: 3, 목: 4, 금: 5, 토: 6)

from datetime import datetime as dt a = dt.today() # datetime.datetime(2019, 11, 6, 19, 25, 12, 634) b = dt(2019, 10, 16, 14, 11, 59) # datetime.datetime(2019, 10, 16, 14, 11, 59, 0) a.year # 2019 a.month # 11 a.day # 6 a.hour # 19 a.minute # 25 a.second # 12 a.microsecond # 634 a - b # datetime.timedelta(seconds=18914, microseconds=748890) b > a # True

timedelta : date, time, datetime의 차이 값을 나타내는 클래스

  • +, - 연산으로 시간이나 날짜의 차이 값으 구함
  • timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 으로 초기화 가능

from datetime import date as d from datetime import datetime as dt from datetime import timedelta as td a = dt.today() # datetime.datetime(2019, 11, 6, 19, 25, 12, 634) a - b # datetime.timedelta(seconds=18914, microseconds=748890) d.today() + td(days=10) # datetime.date(2019, 11, 16)

random

random은 난수 생성을 위한 도구를 제공한다.

  • random.smaple(candidates, pop) : sequence나 set타입인 후보(candidates)들 중에서 pop(int) 개수만큼 중복 없이 추출한다. candidates의 크기가 pop보다 작다면 ValueError를 일으킨다. candidates는 중복 값이 있는 것도 허용한다.
  • random.choice(iter) : 이터레이터인 iter중에서 하나를 랜덤하게 리턴한다
  • random.randrange(n) : range(n)에서 하나의 수를 뽑는다.

import random radnom.choice(['alpha', 'bravo', 'charlie']) # 'bravo' random.sample(range(100), 10) # [16, 54, 42, 71, 8, 1, 29, 7, 70, 62] random.randrange(11) # 8

 


 

Python itertools

파이썬으로 코딩할 때, 종종 순열, 조합, product를 구현하거나 사용해야 할 때가 있다. 이럴 때 힘들게 구현하지 말고 파이썬에서 만들어둔 표준 라이브러리인 itertools를 사용해보자

combinations

조합을 표현할 때 사용되는 메소드이다. 한 리스트에서 중복을 허용하지 않고 모든 경우의 수를 구하는 것이다. 반환되는 항목의 수는 n! / r! / (n - r)!이다. 사용법은 다음과 같다.

from itertools import combinations _list = [1, 2, 3] combi = list(combinations(_list, 2)) print(combi) # [(1, 2), (1, 3), (2, 3)] # 갯수 별로 조합을 반복할 수 있다. for i in range(1, len(_list) + 1): print(list(combinations(_list, i))) # [(1,), (2,), (3,)] # [(1, 2), (1, 3), (2, 3)] # [(1, 2, 3)]

permutations

순열을 표현할 때 사용되는 메소드이다. 한 리스트에서 중복을 허용하고 모든 경우의 수를 구하는 것이다. 반환되는 항목의 수는 n! / r!이다.

from itertools import permutaions _list = [1, 2, 3] perm = list(permutations(_list, 2)) print(perm) # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

product

데카르트 곱이라고도 하는 cartesian product를 표현할 때 사용하는 메소드이다(DB의 join, 관계 대수의 product를 생각하면 된다). 이 메소드의 특징은 두 개 이상의 리스트의 모든 조합을 구할 때 사용된다.

from itertools import product _list = ["012", "abc", "!@#"] pd = list(product(*_list)) # [('0', 'a', '!'), ('0', 'a', '@'), ('0', 'b', '!'), ('0', 'b', '@'), ('1', 'a', '!'), ('1', 'a', '@'), ('1', 'b', '!'), ('1', 'b', '@')]

주의할 점

combinations, permutations, product 세 메소드 모두 generator이기 때문에 list()로 캐스팅하여 다른 곳에 저장 해두지 않으면 한 번의 루핑 이후 사라지게 된다.

from itertools import combinations _list = range(4) combi = combinations(_list, 2) print(list(combi)) # [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)] print(list(combi)) # []

Reference

https://docs.python.org/ko/3/library/itertools.html

 

itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 — Python 3.9.1 문서

 

docs.python.org

 


 

사람의 생각을 대신해 주는 서비스는 언제 나올까?

    이미지 맵

    Engineering/코딩 다른 글

    이전 글

    다음 글