list comprehension

BackEnd_Ash.log·2020년 5월 26일
0

파이썬

목록 보기
13/34

일반적인 방법

numbers = []

for n in range(1 , 10):
    numbers.append(n)

print(numbers)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

list comprehension 사용

[(표현식) for (배열의 원소) in (배열)]

numbers2 = [x for x in range(1 , 10)]
print(numbers2)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

조건 필터 추가하기

test_num3 = [x for x in range(1 , 10) if x % 2 ==0]
print(test_num3)
# [2, 4, 6, 8]
test_num3 = [x*2 for x in range(1, 10) if x %2 ==0]
print(test_num3)
# [4, 8, 12, 16]

cubes = [n **3 for n in range(1,10)]
print(cubes)
# [1, 8, 27, 64, 125, 216, 343, 512, 729]

이중 for문 들어간 경우

r1 = ['black', 'white']
r2 = ['red', 'blue', 'green']
r3 = []

for t in r1 :
    for p in r2:
        r3.append(t + p)

print(r3)
# ['blackred', 'blackblue', 'blackgreen', 'whitered', 'whiteblue', 'whitegreen']

이러한 문자를 list comprehension 을 이용해서 바꿀 수 있다.'

r1 = ['black' , 'white']
r2 = ['red' , 'blue' , 'green']
r3 = []
r3 = [t+p for t in r1 for p in r2]
print(r3)
# ['blackred', 'blackblue', 'blackgreen', 'whitered', 'whiteblue', 'whitegreen']

제일 처음에 있는 반복문 부터 읽어가면 된다.
그리고 마지막으로 표현되는것은 t+p 라고 생각하면 된다.

r = [n * m for n in range(2, 10) for m in range(1, 10) if (n * m) % 2]
print(r)
# [3, 9, 15, 21, 27, 5, 15, 25, 35, 45, 7, 21, 35, 49, 63, 9, 27, 45, 63, 81]

append list comprehension

    for row in map_reader:
        company_list.append(row[2])
        
    [company_list.append(row[2]) for row in map_reader]

이중 for 문 comprehension

duplicate_name = []
for b in broad_list:
    for c in company_list:
        if b == c:
            duplicate_name.append(c)
            

이렇게 되어있는 것을
list comprehension 을 사용하게 되면

duplicate_name = []

[duplicate_name.append(c) for c in company_list for b in broad_list if b==c]

이중 포문을 사용하게 되면

for c in company_list for b in broad_list

중에서 앞의 for 문

for c in company_list 

문이 먼저 시작하게 되고
그리고

for b in broad_list

반복문이 시작하게 된다.

다른 예제로

for bio in bio_list:
    for company in company_list:
        if bio == company:
            print(bio)

이 코드를 list comprehension 을 사용하게 된다면,

[print(bio) for bio in bio_list for company in company_list if bio==company]

코드 정리

그리고 이것은 팁인데 ,
list comprehension 을 사용하게 되면
코드가 오른쪽으로 길어지게 된다.

이때

[duplicate_name.append(c)
 for b in broad_list
 for c in company_list if b == c]

그냥 이렇게 정리하면 된다.

profile
꾸준함이란 ... ?

0개의 댓글