Python 목록 이해는 Python 목록의 각 요소를 반복하기 위해 for 루프와 함께 각 요소에 대해 실행되는 표현식을 포함하는 대괄호로 구성됩니다.
예:
파이썬
numbers>=> [>12>,>13>,>14>,]> doubled>=> [x>*>2> for> x>in> numbers]> print>(doubled)> |
>
>
산출
[24, 26, 28]>
Python 목록 이해 구문
통사론: 새로운 목록 = [ 표현식(요소) ~을 위한 요소 ~에 이전 목록 만약에 상태 ]
매개변수:
표현식 : iterable 내의 모든 항목에 대해 실행하려는 작업을 나타냅니다. element : 변수라는 용어는 iterable에서 가져온 각 값을 나타냅니다. iterable : 반복하려는 요소의 시퀀스를 지정합니다(예: 목록, 튜플 또는 문자열). 조건 : (선택 사항) 필터는 요소를 새 목록에 추가해야 하는지 여부를 결정하는 데 도움이 됩니다.
반품: 목록 내포의 반환 값은 주어진 기준을 충족하는 수정된 요소를 포함하는 새로운 목록입니다.
Python List Comprehension은 기존 목록의 값을 기반으로 새 목록을 생성하기 위한 훨씬 더 짧은 구문을 제공합니다.
Python 예제의 목록 이해
다음은 Python에서 숫자의 제곱을 찾기 위해 목록 이해를 사용하는 예입니다.
파이썬
numbers>=> [>1>,>2>,>3>,>4>,>5>]> squared>=> [x>*>*> 2> for> x>in> numbers]> print>(squared)> |
>
>
산출
[1, 4, 9, 16, 25]>
목록 이해를 통한 반복
이 예에서는 목록에 1, 2, 3을 할당하고 List Comprehension을 사용하여 목록을 인쇄합니다.
파이썬
# Using list comprehension to iterate through loop> List> => [character>for> character>in> [>1>,>2>,>3>]]> > # Displaying list> print>(>List>)> |
>
>
산출
[1, 2, 3]>
List Comprehension을 사용한 짝수 목록
이 예에서는 List Comprehension을 사용하여 0부터 10까지의 짝수를 인쇄합니다.
파이썬
list> => [i>for> i>in> range>(>11>)>if> i>%> 2> =>=> 0>]> print>(>list>)> |
>
>
산출
[0, 2, 4, 6, 8, 10]>
목록 이해를 사용한 행렬
이 예에서는 행렬의 0~2~3개 행에 정수를 할당하고 List Comprehension을 사용하여 인쇄합니다.
파이썬
matrix>=> [[j>for> j>in> range>(>3>)]>for> i>in> range>(>3>)]> > print>(matrix)> |
>
>
산출
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]>
목록 이해와 For 루프
목록을 반복하는 방법에는 여러 가지가 있습니다. 그러나 가장 일반적인 접근 방식은 다음을 사용하는 것입니다. ~을 위한 고리 . 아래 예를 살펴보겠습니다.
파이썬
# Empty list> List> => []> > # Traditional approach of iterating> for> character>in> 'Geeks 4 Geeks!'>:> >List>.append(character)> > # Display list> print>(>List>)> |
>
>
산출
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']>
위는 목록, 문자열, 튜플 등을 반복하는 전통적인 접근 방식을 구현한 것입니다. 이제 Python의 목록 이해는 동일한 작업을 수행하고 프로그램을 더 단순하게 만듭니다.
List Comprehension은 다음을 사용하여 전통적인 반복 접근 방식을 변환합니다. for 루프 간단한 공식으로 변환되어 사용하기 쉽습니다. 다음은 Python에서 목록 이해를 사용하여 목록, 문자열, 튜플 등을 반복하는 접근 방식입니다.
파이썬
# Using list comprehension to iterate through loop> List> => [character>for> character>in> 'Geeks 4 Geeks!'>]> > # Displaying list> print>(>List>)> |
>
>
산출
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']>
목록 이해 및 루프의 시간 분석
Python의 목록 이해는 for 루프보다 계산적으로나 코딩 공간 및 시간 측면에서 더 효율적입니다. 일반적으로 한 줄의 코드로 작성됩니다. 아래 프로그램은 성능에 따라 루프와 목록 이해의 차이점을 보여줍니다.
파이썬
자바의 일반성
# Import required module> import> time> > > # define function to implement for loop> def> for_loop(n):> >result>=> []> >for> i>in> range>(n):> >result.append(i>*>*>2>)> >return> result> > > # define function to implement list comprehension> def> list_comprehension(n):> >return> [i>*>*>2> for> i>in> range>(n)]> > > # Driver Code> > # Calculate time taken by for_loop()> begin>=> time.time()> for_loop(>10>*>*>6>)> end>=> time.time()> > # Display time taken by for_loop()> print>(>'Time taken for_loop:'>,>round>(end>->begin,>2>))> > # Calculate time takens by list_comprehension()> begin>=> time.time()> list_comprehension(>10>*>*>6>)> end>=> time.time()> > # Display time taken by for_loop()> print>(>'Time taken for list_comprehension:'>,>round>(end>->begin,>2>))> |
>
>
산출
Time taken for_loop: 0.39 Time taken for list_comprehension: 0.35>
위 프로그램에서 목록 이해가 for 루프보다 훨씬 빠르다는 것을 알 수 있습니다.
중첩된 목록 이해
중첩된 목록 이해 중첩된 for 루프와 매우 유사한 다른 목록 이해 내의 목록 이해에 지나지 않습니다. 다음은 중첩 루프를 구현하는 프로그램입니다.
파이썬
matrix>=> []> > for> i>in> range>(>3>):> > ># Append an empty sublist inside the list> >matrix.append([])> > >for> j>in> range>(>5>):> >matrix[i].append(j)> > print>(matrix)> |
>
>
산출
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]>
이제 중첩된 목록 이해를 사용하면 더 적은 코드 줄로 동일한 출력을 생성할 수 있습니다.
산업과 공장
파이썬
# Nested list comprehension> matrix>=> [[j>for> j>in> range>(>5>)]>for> i>in> range>(>3>)]> > print>(matrix)> |
>
>
산출
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]>
목록 이해 및 람다
람다 표현식 Python 함수를 간략하게 표현한 것에 불과합니다. 람다와 함께 목록 이해를 사용하면 효율적인 조합이 생성됩니다. 아래 예를 살펴보겠습니다.
이 예에서는 목록에 10부터 50까지의 숫자를 삽입하고 인쇄합니다.
파이썬
# using lambda to print table of 10> numbers>=> []> > for> i>in> range>(>1>,>6>):> >numbers.append(i>*>10>)> > print>(numbers)> |
>
>
산출
[10, 20, 30, 40, 50]>
여기서는 for 루프를 사용하여 10개의 테이블을 인쇄했습니다.
파이썬
numbers>=> [i>*>10> for> i>in> range>(>1>,>6>)]> > print>(numbers)> |
>
>
산출
[10, 20, 30, 40, 50]>
이제 여기서는 10개의 테이블을 표시하기 위해 목록 이해만 사용했습니다.
파이썬
# using lambda to print table of 10> numbers>=> list>(>map>(>lambda> i: i>*>10>, [i>for> i>in> range>(>1>,>6>)]))> > print>(numbers)> |
>
>
산출
[10, 20, 30, 40, 50]>
마지막으로 람다 + 목록 이해를 사용하여 10의 테이블을 표시합니다. 이 조합은 복잡한 문제에 대해 더 적은 코드 줄로 효율적인 솔루션을 얻는 데 매우 유용합니다.
목록 이해의 조건부
또한 목록 이해에 조건문을 추가할 수도 있습니다. 다음을 사용하여 목록을 만들 수 있습니다. 범위(), 운영자 등, 그리고 cal은 또한 다음을 사용하여 목록에 일부 조건을 적용합니다. if 문 .
키 포인트
- 목록을 이해하는 것은 현재 목록을 기반으로 목록을 설명하고 구성하는 효과적인 수단입니다.
- 일반적으로 목록 이해는 표준 목록 형성 기능 및 루프보다 가볍고 간단합니다.
- 사용자 친화적인 코드를 보장하기 위해 목록 이해에 대한 긴 코드를 작성해서는 안 됩니다.
- 목록의 모든 이해는 for 루프에서 다시 작성할 수 있지만 목록 해석의 맥락에서는 모든 for 루프를 다시 작성할 수 없습니다.
다음은 iterable을 통해 반복하는 전통적인 접근 방식이 아닌 목록 이해의 사용을 설명하는 몇 가지 예입니다.
If-else를 사용한 Python 목록 이해
예제에서는 숫자가 짝수이면 0부터 7까지 확인한 다음 삽입합니다. 우수 목록에 다른 삽입 홀수 목록에.
파이썬
lis>=> [>'Even number'> if> i>%> 2> =>=> 0> >else> 'Odd number'> for> i>in> range>(>8>)]> print>(lis)> |
>
>
산출
['Even number', 'Odd number', 'Even number', 'Odd number', 'Even number', 'Odd number', 'Even number', 'Odd number']>
목록 이해가 포함된 중첩 IF
이 예에서는 목록에 10에서 100의 배수인 숫자를 삽입하고 인쇄합니다.
파이썬
lis>=> [num>for> num>in> range>(>100>)> >if> num>%> 5> =>=> 0> if> num>%> 10> =>=> 0>]> print>(lis)> |
>
>
산출
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]>
1부터 10까지의 숫자를 제곱으로 표시
이 예에서는 목록에 1부터 10까지의 사각형을 삽입하고 목록을 인쇄합니다.
파이썬
# Getting square of number from 1 to 10> squares>=> [n>*>*>2> for> n>in> range>(>1>,>11>)]> > # Display square of even numbers> print>(squares)> |
>
>
산출
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]>
2D 매트릭스의 전치 표시
이 예에서는 목록 이해를 사용하여 행렬을 전치합니다.
파이썬
# Assign matrix> twoDMatrix>=> [[>10>,>20>,>30>],> >[>40>,>50>,>60>],> >[>70>,>80>,>90>]]> > # Generate transpose> trans>=> [[i[j]>for> i>in> twoDMatrix]>for> j>in> range>(>len>(twoDMatrix[>0>]))]> > print>(trans)> |
>
>
산출
[[10, 40, 70], [20, 50, 80], [30, 60, 90]]>
문자열의 각 문자의 대소문자를 전환합니다.
이 예에서는 XOR 연산자를 32로 사용하여 주어진 문자열에서 각 문자의 대소문자를 전환하고 결과를 목록에 저장합니다.
파이썬
# Initializing string> string>=> 'Geeks4Geeks'> > # Toggle case of each character> List> => list>(>map>(>lambda> i:>chr>(>ord>(i) ^>32>), string))> > # Display list> print>(>List>)> |
>
성능 시험
>
산출
['g', 'E', 'E', 'K', 'S', 'x14', 'g', 'E', 'E', 'K', 'S']>
튜플의 각 문자열을 뒤집습니다.
이 예에서는 for 루프의 문자열을 뒤집어 목록에 삽입하고 목록을 인쇄합니다.
파이썬
# Reverse each string in tuple> List> => [string[::>->1>]>for> string>in> (>'Geeks'>,>'for'>,>'Geeks'>)]> > # Display list> print>(>List>)> |
>
>
산출
['skeeG', 'rof', 'skeeG']>
두 개의 개별 목록에서 튜플 목록 만들기
이 예에서는 두 개의 목록을 만들었습니다. 이름과 나이. 우리는 사용하고 있습니다 지퍼() 목록 이해에서는 이름과 나이를 목록에 튜플로 삽입합니다. 마지막으로 튜플 목록을 인쇄합니다.
파이썬
names>=> [>'G'>,>'G'>,>'g'>]> ages>=> [>25>,>30>,>35>]> person_tuples>=> [(name, age)>for> name, age>in> zip>(names, ages)]> print>(person_tuples)> |
>
>
산출:
[('G', 25), ('G', 30), ('g', 35)]> 목록에 있는 모든 홀수 요소의 자릿수 합계를 표시합니다.
이 예에서는 목록을 만들고 목록에 있는 모든 홀수 요소의 자릿수 합계를 찾습니다.
파이썬
# Explicit function> def> digitSum(n):> >dsum>=> 0> >for> ele>in> str>(n):> >dsum>+>=> int>(ele)> >return> dsum> > > # Initializing list> List> => [>367>,>111>,>562>,>945>,>6726>,>873>]> > # Using the function on odd elements of the list> newList>=> [digitSum(i)>for> i>in> List> if> i &>1>]> > # Displaying new list> print>(newList)> |
>
>
산출
[16, 3, 18, 18]>
목록 이해의 장점
- 루프보다 시간 효율적이고 공간 효율적입니다.
- 더 적은 수의 코드가 필요합니다.
- 반복문을 수식으로 변환합니다.
Python 목록 이해 연습 문제
다음은 Python 목록 이해에 관한 두 가지 연습 문제입니다. 우리는 숫자의 큐브를 찾는 기본 목록 이해 코드와 목록 이해 및 len() 함수를 사용하여 단어의 길이를 찾는 코드를 다루었습니다.
Q1. 목록 이해를 이용한 숫자 큐브 연습 문제
파이썬
numbers>=> [>1>,>2>,>3>,>4>,>5>,>6>,>7>,>8>,>9>,>10>]> cube>=> [number>*>*>3> for> number>in> numbers]> print>(cube)> |
>
>
산출
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]>
Q2. 목록 이해를 이용한 단어 길이 연습 문제 찾기
파이썬
words>=> [>'apple'>,>'banana'>,>'cherry'>,>'orange'>]> word_lengths>=> [>len>(word)>for> word>in> words]> print>(word_lengths)> |
>
>
산출
[5, 6, 6, 6]>