티스토리 뷰
목차
파이썬 문법 중 정말 멋진 컴프리헨션(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*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(20) if 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(100) for i in range(10)] g2 = [random.randrange(100) for i in range(10)] g3 = [random.randrange(100) for i in range(10)] h = [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(100) for i in range(10)] g2 = [random.randrange(100) for i in range(10)] g3 = [random.randrange(100) for i in range(10)] h = [g1, g2, g3] k = 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 == 1] for 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(100) for i in range(10)] g2 = [random.randrange(100) for i in range(10)] g3 = [random.randrange(100) for 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 | m = 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 | m = 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