티스토리 뷰

목차

    파이썬 문법 중 정말 멋진 컴프리헨션(Comprehensions) 예제 8개입니다. 컴프리헨션에 대해선 아래 링크 2개 글을 읽어주시고 이 포스트에선 다양한 예제 확인하시면 됩니다.


    Python Comprehensions


    이론적인 부분은 위 파이썬 글 2개 참조해 주시고, 예제 소개 시작합니다.

    1. 컴프리헨션 + for 반복문

    1
    2
    3
    4
    5
    6
    7
    8
    9
    e1 = [i   for i in range(10)]
    e2 = [i*for i in range(10)]
    e3 = [i   for i in range(len(e1)-1,-1,-1)]
    e4 = [i   for i in reversed(e1)]
     
    print(e1)
    print(e2)
    print(e3)
    print(e4)
    cs


    ■ 결과




    2. 홀수 리스트 생성

    1
    2
    print([i for i in range(1,20,2)])
    print([i for i in range(20if i%2 == 1])
    cs


    ■ 결과



    range 영역에 인자로 설정할 수 있지만, 2번 라인처럼 if문을 활용할 수도 있습니다.



    3. 리스트에서 홀수만 추출

    1
    2
    3
    4
    f1 = [i for i in range(20)]
    f2 = [i for i in f1 if i%2 == 1]
     
    print(f2)
    cs


    ■ 결과



    파이썬 컴프리헨션 활용하는 조건에 if 문을 추가하여 f1 리스트에서 홀수만 추출합니다.


    4. 파이썬 컴프리헨션 + 랜덤

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import random
     
    random.seed(1)
    g1 = [random.randrange(100for i in range(10)]
    g2 = [random.randrange(100for i in range(10)]
    g3 = [random.randrange(100for i in range(10)]
     
    = [g1, g2, g3]
     
    print(h)
     
    for i in h:
        for j in i:
            print(j, end=' ')
        print()
     
     
    def isExist(numbers, v):
        for i in numbers:
            if i == v:
                return True
     
        return False
     
    def includes(ns, v):
        for i in ns:
            # if isExist(i, v) == True:
            if v in i:
                return True
     
        return False
     
    print(includes(h, 83))
    cs


    ■ 결과



    랜덤을 활용해 리스트 3개를 생성합니다.

    10번 라인, 14번 라인 통해서 리스트 데이터를 모두 출력합니다.

    33번 라인에서 includes 함수를 호출하여 83 값이 있는지 확인합니다. 18번 라인은 써도 되고 안 써도 됩니다.



    5. Comprehension 다양한 Print 출력 방법

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import random
     
    random.seed(1)
    g1 = [random.randrange(100for i in range(10)]
    g2 = [random.randrange(100for i in range(10)]
    g3 = [random.randrange(100for i in range(10)]
     
    = [g1, g2, g3]
     
    = h
     
    print([item for item in k])
    print([[i for i in item] for item in k])
    print([[i for i in item if i%2 == 1for item in k])
     
    print([j for i in k for j in i])
    print([j for i in k for j in i if j%2 == 1])
    cs


    ■ 결과



    12, 13번 라인은 리스트 전체 출력입니다.

    14번 라인은 홀수만 출력합니다.

    16번 라인, 컴프리헨션은 조건이 늘어날수록 코드 분석하기 어렵습니다. 16번 라인처럼 조건 2개는 괜찮지만 10개 20개 넣는 건 하지 마세요. 리스트에서 읽은 인자를 개별 정수로 2번째 조건문에 넣어 출력합니다.


    17번 라인, 16번 라인은 모두 출력이지만 여기선 홀수 출력입니다.


    6. 파이썬 컴프리헨션 + zip

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import random
     
    random.seed(1)
    g1 = [random.randrange(100for i in range(10)]
    g2 = [random.randrange(100for i in range(10)]
    g3 = [random.randrange(100for i in range(10)]
     
    print([ g1[i]+g2[i]+g3[i]  for i in range(len(g1))])
    print([(g1[i],g2[i],g3[i]) for i in range(len(g1))])
     
    print(type(zip(g1,g2,g3)))
    print(list(zip(g1,g2,g3)))
     
    print([(g1[i],g2[i]) for i in range(len(g1))])
    print(dict([(g1[i],g2[i]) for i in range(len(g1))]))
    print(dict(zip(g1,g2)))
    cs


    ■ 결과



    zip, dict 활용해 요소를 한데 묶어 처리합니다. 전체 출력 소스는 5번 예제와 유사합니다.



    7. 딕셔너리 출력

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    = dict(color='red', price=100, name='pen')
     
    print([k for k in m])                   # list
    print({i for i in m.items()})           # set
    print({(k,v) for k, v in m.items()})    # set
    print({(v,k) for k, v in m.items()})    # set
     
    print({k:v for k, v in m.items()})
    print({v:k for k, v in m.items()})
     
    print(dict({i for i in m.items()}))
    print(dict({(k,v) for k, v in m.items()}))
    print(dict({(v,k) for k, v in m.items()}))
     
    print({k:v for k, v in m.items() if type(v) == int})
    cs


    ■ 결과



    6번 예제처럼 다양한 출력 방법을 소개합니다. 결과는 유사하나 방법은 다양합니다.



    8. 딕셔너리 zip map 출력 Print 방법

    1
    2
    3
    4
    5
    = dict(color='red', price=100, name='pen')
     
    print(dict(zip(m.keys(), m.values())))
    print(dict(zip(m.values(), m.keys())))
    print(dict(map(reversed, m.items())))
    cs


    ■ 결과



    Python 컴프리헨션 7번 예제처럼 다양한 출력 방식을 소개합니다.



    관련 글


    파이썬 print 재귀함수, 반복 출력, 문자열 거꾸로 뒤집기


    파이썬 정렬 sort sorted reverse=true 예제 4개


    파이썬 정렬 소스, 숫자 문자열 예제 6개 sorted join



    ⓒ written by vicddory