파이썬 List compresion은 2.xx에서부터 지원하고, set, dictionary comprehension은 3.xx부터 지원한다.
기본적으로
[출력표현식 for (요소) in (sequence) if (조건문)] 형태를 띄는데
예를 들면,
s = [i*i for i in range(10) if i %2 ==0]
print(s)
이런식으로 쓰는데,
s = [(x,y) for x in range(3) for y in range(3)]
print(s)
oldlist = [1,2,'A',False,3]
newlist = [s for i in oldlist ]
print(newlist)
이렇게 쓰는것도 가능하다. 그런데
출력표현식이 뒤의 조건문이나, 요소를 포함하지 않아도 가능하다.
s = [random.randint(1,100) for _ in range(100)]
print(s)
쉽게 for 문 만큼 루프를 돌고, 조건문이 충족할때 마다, 출력표션식이 list의 component로 출력된다. 라고 이해하면 되겠다.
if else까지 쓰려면 조건문이 앞에 붙는다.
[출력표현식1 if cond1 else 출력표현식2 for (요소) in (sequence)]
ex)
[1 if x>10 else 0 for x in [5,15,5,15]]
output) [0 1 0 1]
else없이 if만 쓰려면 조건문이 뒤에 붙는다 .
[출력표현식1 for (요소) in (sequence) if cond1]
ex)
[1 for x in [5,15,5,15] if x>10 ]
여기에 for loop을 도는 sequence에 조건을 하나 더 걸수 있다.
[출력표현식1 if cond1 else 출력표현식2 for (요소) in sequence if 요소에 대한 cond2]
ex)
[1 if x>10 else 0 for x in [4,14, 7, 17] if x%2==0]
output)
[0 1]
반응형
'Programming > python' 카테고리의 다른 글
python double colon :: (0) | 2019.03.15 |
---|---|
[python] convert ipynb to py (0) | 2019.02.07 |
[python] virtualenv, ipykernel 사용법 (2) | 2019.01.29 |
[python] module파일을 수정시 main script에 반영안되는 문제, importlib (0) | 2019.01.15 |
Numpy arrary 구조 이해하기 (0) | 2018.09.05 |