Python의 목록 이해

List Comprehensions Python



목록 이해는 반복 가능한 개체를 반복하여 새 목록이나 사전을 만드는 한 줄 명령문을 작성하기 위해 Python에서 자주 사용됩니다. 이 기사에서는 Python에서 for 루프가 작동하는 방법에 대한 기본 설명으로 시작하여 Python에서 목록 이해를 사용하는 방법을 설명합니다.

Python의 For 루프

Python의 for 루프 문은 개체, 목록, 문자열 등의 구성원을 순차적으로 반복합니다. 다른 프로그래밍 언어와 비교할 때 구문이 훨씬 깨끗하고 수동으로 반복 단계를 정의하고 반복을 시작할 필요가 없습니다. 동작을 다른 프로그래밍 언어와 동일하게 만드는 방법이 있지만(이 기사에서는 다루지 않음). continue, break, pass 등과 같은 명령문을 사용하여 for 루프를 제어할 수도 있습니다. 다음은 Python에서 for 루프의 간단한 예입니다.







~을위한NS~에 범위(10):
인쇄(NS)

위의 for 루프는 0에서 시작하여 9로 끝나는 10개의 숫자를 인쇄합니다.

목록 이해

목록 이해는 한 줄짜리 문에서 여러 줄 for 루프를 작성하는 속기/간단한 방법일 뿐입니다. 아래 목록 이해 예제는 x의 모든 값을 포함하여 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]와 같은 새 목록을 만듭니다.

숫자= [NS~을위한NS~에 범위(10)]
인쇄 (숫자)

목록 이해는 항상 새 목록을 생성하며 표현식에 사용된 원래 이터러블을 수정하지 않습니다. 일반적인 목록 이해 표현식에는 for 절이 있어야 하며 그 뒤에 if 및 else 조건문이 올 수 있습니다. 목록 이해를 사용하지 않고 위의 예는 다음과 같은 방식으로 작성됩니다.

숫자= []
~을위한NS~에 범위(10):
숫자.추가(NS)

인쇄 (숫자)

성능 및 가독성

목록 이해는 for 루프보다 빠릅니다. 그러나 수십만 개의 항목을 반복하지 않는 한 주요 성능 향상을 느끼지 못할 것입니다. 목록 이해는 for 루프를 작성하는 간결한 방법을 제공하지만 복잡한 표현식은 코드의 가독성을 저하시키고 자세한 정보를 증가시킬 수 있습니다. 최대 성능을 달성하는 것이 프로그램에 절대적으로 필요한 경우가 아니면 코드를 읽을 수 있도록 유지하는 것이 중요합니다.

예: 사전 및 집합과 함께 목록 이해 구문 사용

파이썬 사전은 키-값 쌍으로 정의된 요소 모음이고 집합은 중복이 허용되지 않는 고유 값 모음입니다. 목록 이해는 Python 사전 및 집합에서도 사용할 수 있습니다. 구문은 약간 다릅니다. 표현식을 대괄호로 묶는 대신 이제 중괄호를 사용해야 합니다. 또한 새 목록 대신 새 사전/세트 개체를 얻을 수 있습니다.

데이터= {'도시':'뉴욕', '이름':'존 도우'}

formatted_data= {케이 V.제목() ~을위한에게,V~에데이터.아이템()}

인쇄 (formatted_data)

위의 예는 문자열 값을 제목 대소문자로 변환하고 formatted_data라는 새 사전을 생성합니다. 이 사전의 출력은 {'city': 'New York', 'name': 'John Doe'}입니다. 또한 왼쪽에 기존 사전 변수를 지정하여 사전 / 제자리에 설정을 변경할 수 있습니다.

데이터= {'도시':'뉴욕', '이름':'존 도우'}

데이터= {케이 V.제목() ~을위한에게,V~에데이터.아이템()}

인쇄 (데이터)

사전 이해를 사용하지 않으면 코드는 다음과 같습니다.

데이터= {'도시':'뉴욕', '이름':'존 도우'}

formatted_data= {}

~을위한에게,V~에데이터.아이템():
formatted_data[에게] =V.제목()

인쇄 (formatted_data)

집합에는 키-값 쌍이 없으므로 집합 이해도 목록 이해와 같은 방식으로 정의할 수 있습니다. 유일한 차이점은 중괄호의 사용입니다.

예: 목록 이해의 여러 For 루프

위에서 언급한 목록 이해 예제는 기본이며 단일 for 문을 사용합니다. 다음은 여러 for 루프와 조건부 if 문을 사용하는 예입니다.

형용사= ['디스크', '이안', '포컬', '교활한']

동물= ['들개', '어민', '구덩이', '비버']

코드네임= [x +''+ 그리고~을위한NS~에형용사~을위한그리고~에동물만약그리고.시작하다(NS[0])]

인쇄 (코드네임)

코드는 출력으로 ['Disco Dingo', 'Eoan Ermine', 'Focal Fossa']를 표시합니다. 두 개의 for 루프는 형용사와 동물 목록을 살펴보고 두 단어의 첫 글자가 동일한 경우에만 해당 구성원을 공백으로 연결합니다. 목록 이해를 사용하지 않으면 코드는 다음과 같습니다.

형용사= ['디스크', '이안', '포컬', '교활한']
동물= ['들개', '어민', '구덩이', '비버']

코드네임= []

~을위한NS~에형용사:
~을위한그리고~에동물:
만약그리고.시작하다(NS[0]):
코드네임.추가(x +''+ 그리고)

인쇄 (코드네임)

예: if-else 절을 ​​사용한 목록 이해

아래 예는 목록 내포에서 if 및 else 문의 사용법을 보여줍니다.

number_list= [1, 2, , 4]
other_list= [5, 6, 7, 8]

결과= [진실 만약 (x + y)%2 == 0 또 다른 거짓 ~을위한NS~에number_list~을위한그리고~에other_list]

인쇄 (결과)

두 개의 목록을 반복하는 동안 위의 목록 이해는 요소 쌍의 합이 짝수인지 여부를 확인합니다. 위의 코드를 실행하면 [True, False, True, False, False, True, False, True, True, False, True, False, False, True, False, True]가 출력으로 표시됩니다. 목록 이해를 사용하지 않으면 코드는 다음과 같습니다.

number_list= [1, 2, , 4]
other_list= [5, 6, 7, 8]
결과= []

~을위한NS~에번호 목록:
~을위한그리고~에other_list:
만약 (x + y)%2 == 0:
결과.추가(진실)
또 다른:
결과.추가(거짓)

인쇄 (결과)

결론

목록 이해는 깨끗하고 간결한 루프 문을 작성하는 좋은 방법을 제공합니다. 그러나 여러 루프와 조건문이 사용되는 경우 빠르게 복잡해지고 이해하기 어려울 수 있습니다. 결국 프로그래머의 편안함 수준에 이르게 되지만 일반적으로 약칭을 과도하게 사용하는 대신 명시적이고 읽기 쉽고 디버그하기 쉬운 코드를 작성하는 것이 좋습니다.