본문 바로가기
Programming/python

[python] list comprehension

by 단창 2019. 1. 30.

파이썬 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]

반응형