글쓰는 개발자
파이썬 기초문법 8 - list comprehension, generator expression, all, any, set 본문
파이썬 기초문법 8 - list comprehension, generator expression, all, any, set
세가사 2021. 2. 15. 03:24def printall(*args):
print(args)
printall(1, 2.0, '3') # (1, 2.0, '3')
1. 조건식
조건문은 두 가지 상황중 하나가 사용될 때 사용된다. 그런데 두가지 값중 하나를 사용할 때는 조건식을 사용할 수 있다.
if x > 0:
y = math.log(x)
else:
y = float(x)
위와 같이 x가 0보다 크면 log를 취하고 x가 0보다 작으면 float값을 가지는 조건문을 다음과 같은 조건식으로 나타낼 수 있다.
y = math.log(x) if x > 0 else float(x)
2. list comprehension
리스트에 모든 값을 돌면서 같은 처리를 해주고 싶을 때 리스트 컴프리헨션을 사용한다. 예를들어 여러개의 과일 목록을 담은 리스트를 capitalize하고 싶으면 다음과 같은 문법을 사용한다.
t = ['apple', 'banana', 'tomato']
print([s.capitalize() for s in t])
3. generator expression
generator expression은 comprehension과 비슷하지만 [] 대신 ()를 사용한다. generator expression은 list comprehension과는 다르게 결과를 한번에 생성하지 않고 next 내장함수를 사용해 하나씩 값을 생성한다.
g = (x*2 for x in range(4))
next(g) # 0
next(g) # 2
next(g) # 4
next(g) # 6
또한 for문을 사용해서 자동으로 값을 출력할 수도 있다.
g = (x*2 for x in range(4))
for val in g:
print(val)
'''
0
2
4
6
'''
4. any와 all
파이썬에서 bool 값들의 시퀀스를 받아서 그 중 하나라도 True이면 True를 모두 False이면 False를 반환하는 any 내장함수가 있다. 이와 반대로 all은 시퀀스 값중에 하나라도 False가 존재하면 False를 반환하고 모두 True면 True를 반환한다.
any([True, False, False]) # True
any([False, False, False]) # False
all([True, True, True]) # True
all([True, False, False]) # False
5. set
list에서 중복을 제거하고 싶을 때 유일한 목록으로 된 set을 사용하면 유용하다.
t = ['apple', 'banana', 'tomato', 'apple', 'banana']
print(set(t)) # {'banana', 'tomato', 'apple'}
print(len(set(t))) # 3
6. Counter
리스트의 개수를 간단히 세고 싶으면 Counter 함수를 사용할 수 있다. Counter함수로 만들어진 Counter 객체는 dict처럼 키값을 사용해 값을 출력할 수 있다.
from collections import Counter
t = ['apple', 'banana', 'tomato', 'apple', 'banana']
c = Counter(t)
print(c) # Counter({'apple': 2, 'banana': 2, 'tomato': 1})
print(c['apple']) # 2
7. 인수를 *을 통해 튜플로 모아 처리하는 방법은 아래와 같다.
def printall(*args):
print(args)
printall(1, 2.0, '3') # (1, 2.0, '3')
하지만 * 연산자는 키워드 인수를 모으지 않는다.
printall(1, 2.0, third='3') # TypeError: printall() got an unexpected keyword argument 'third'
키워드 인수를 모으려면 ** 연산자를 사용해야 한다.
def printall(*args, **kwargs):
print(args, kwargs)
printall(1, 2.0, third='3') #(1, 2.0) {'third': '3'}
** 연산자를 사용하면 다음과 같이 dict를 사용해 class객체에 값을 쉽게 전달가능하다
class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __str__(self):
return '({}, {})'.format(self.x, self.y)
d = dict(x=1, y=2)
p = Point(**d)
print(p) # (1, 2)
'Development > Python' 카테고리의 다른 글
파이썬 기초문법 7 - file, format, path (0) | 2021.02.15 |
---|---|
파이썬 기초문법 6 - dict, tuple, zip (0) | 2021.02.14 |
파이썬 기초문법 5 - list delete, split, join (0) | 2021.02.13 |
파이썬 기초 문법 4 - list, range (0) | 2021.02.13 |
파이썬 기초문법 3 - while, string, in (0) | 2021.02.13 |