>백엔드 개발 >파이썬 튜토리얼 >Python 목록 이해를 적용하는 방법

Python 목록 이해를 적용하는 방법

WBOY
WBOY앞으로
2023-05-20 08:10:132067검색

Python list comprehension

List comprehension은 Python에서 목록을 구성하는 단축어입니다.

1. Range() 함수

python의 range() 함수를 사용하여 목록을 만들 수 있습니다. 일반적으로 for 루프에 사용되는 정수입니다.

range() 구문: range(start, stop[, step])

start: 계산은 시작부터 시작하며 기본값은 0(닫힌 간격)부터 시작하는 것입니다. : range(5)는 range(0,5)와 동일합니다.

stop: 정지 끝까지 계산되지만 정지(개방 간격)는 포함되지 않습니다. 예: range(0,5)는 [0, 1, 2, 3, 4], 5 제외.

단계: 인접한 두 값의 차이, 기본값은 1입니다. 예: range(0,5)는 range(0, 5, 1)과 동일합니다.

List Comprehension에 앞서 range()에 대해 이야기해야 하는 이유는 List Comprehension이 Iterable 객체를 통해 목록을 생성하기 때문입니다. List Comprehension의 경우 가장 일반적으로 사용되는 Iterable 객체라고 할 수 있습니다. range()는 핵심 중 하나입니다. range()가 없으면 목록 이해의 가독성과 단순성이 크게 떨어집니다.

2. 목록 이해

목록 이해(list comprehension) 목록을 만들기 위해 반복하는 것을 말합니다.

for 루프는 매우 광범위한 응용 시나리오를 가지고 있으며 목록을 생성하는 데에도 사용할 수 있으며 목록 이해는 목록을 생성하는 for 루프의 단순화된 버전과 동일합니다.

# for循环
list_a = list()
for a in range(5):
    list_a.append(a)
print(list_a)
# 列表推导式
list_b = [b for b in range(5)]
print(list_b)

위에서는 각각 for를 사용합니다. 루프 및 목록 이해를 사용하여 목록을 생성하는 코드, list_a와 list_b의 결과는 동일하며 둘 다 [0, 1, 2, 3, 4]입니다.

좀 더 복잡한 목록 이해를 살펴보겠습니다.

# in后面跟其他可迭代对象,如字符串
list_c = [7 * c for c in "python"]
print(list_c)
 
# 带if条件语句的列表推导式
list_d = [d for d in range(6) if d % 2 != 0]
print(list_d)
 
# 多个for循环
list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
print(list_e)
 
# 嵌套列表推导式,多个并列条件
list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0]
print(list_g)

실행 결과:

['ppppppp', 'yyyyyyy', 'ttttttt', 'hhhhhhh', 'ooooooo', 'nnnnnnn']
[1, 3, 5]
[(0, 25), (0, 100), (1, 25), (1, 100), (2, 25), (2, 100)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]]

코드 설명:

1. List Comprehension은 다음 반복 가능한 객체를 순회한 후 for 이전의 표현식에 따라 작동하여 최종 목록을 생성합니다.

2. for 순회가 즉시 수행됩니다.

3. for 루프가 여러 개인 경우 최종 데이터 수는 여러 for 루프의 데카르트 곱입니다.

4. 중첩 for 루프의 원리는 동일합니다.

3. 코드 가독성

리스트 컴프리헨션에 익숙하지 않은 분들을 위해 for 루프를 사용하면 동일한 기능을 구현할 수 있지만 여러 줄의 코드가 필요합니다. 한 줄의 코드입니다.

많은 사람들은 코드가 간결하지만 가독성이 떨어진다고 말합니다. 사실 우리가 리스트 컴프리헨션에 익숙해지면(몇 번 작성해 보면 익숙해질 것입니다.) 번), 코드의 기능은 한눈에 쉽게 알 수 있지만, for 루프 코드는 기본적으로 한 눈에 다 읽는 것이 불가능합니다. 특히 리스트를 생성하는 for 루프가 다른 for 루프에 중첩되어 있는 경우에는 더욱 그렇습니다. 비즈니스 논리에서 가장 읽기 쉬운 것은 바로 목록 이해를 사용하는 것입니다.

동시에 목록 이해는 함수와 마찬가지로 로컬 범위에서만 작동합니다. 표현식의 컨텍스트에서 동일한 이름을 가진 항목도 정상적으로 참조할 수 있으며 지역 변수는 영향을 받지 않습니다.

즉, 목록 파생에는 변수 누출 문제가 없으며 할당 작업은 목록 파생은 목록 파생 컨텍스트에서 동일한 이름을 가진 변수에 영향을 미칠 가능성이 없습니다.

물론 모든 시나리오에서 목록 파생을 사용하는 것이 권장되는 것은 아닙니다. 예를 들어 목록 이해 코드가 두 줄을 초과하는 경우 다음으로 변경하는 것을 고려해야 합니다. for 루프. 두 줄을 초과하는 목록 이해는 실제로 읽을 수 없습니다. 일반적인 원칙은 새 목록을 만들 때 목록 이해만 사용하고 가능한 한 짧게 유지하는 것입니다.

4. Python 2.7부터 목록 파생의 개념이 사전에 이식되어 사전 파생이 탄생했습니다(집합 파생은 나중에 살펴보겠습니다).

목록 파생의 개념이 이미 여러분에게 익숙하고 사전 파생을 받아들이는 것은 어렵지 않습니다. 코드를 보세요:

# 因为key是唯一的,所以最后value都是1
dict_a = {key: value for key in 'python' for value in range(2)}
print(dict_a)
 
# 可以根据键来构造值
dict_b = {key: key * key for key in range(6)}
print(dict_b)
 
# 遍历一个有键值关系的可迭代对象
list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
dict_c = {key: value for key, value in list_phone}
print(dict_c)

실행 결과:

{'p': 1, 'y': 1, 't': 1, 'h': 1, 'o': 1, 'n': 1}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
{'HUAWEI': '华为', 'MI': '小米', 'OPPO': 'OPPO', 'VIVO': 'VIVO'}

5. 집합 파생

Python 2.7은 사전 파생뿐만 아니라 집합 파생도 제공합니다.

마찬가지로 코드를 직접 살펴보겠습니다.

# 遍历一个可迭代对象生成集合
set_a = {value for value in '有人云淡风轻,有人负重前行'}
print(set_a)

실행 결과:

{'负', '有', '人', '轻', '前', '云', '重', ',', '淡', '风', '行'}

세트는 순서가 없고 반복되지 않으므로 중복된 요소는 자동으로 제거되며 실행될 때마다 표시 순서가 다릅니다.

할 수 있습니다. 위 코드에서 요약하면

집합 파생은 목록 파생의 []를 {}로 바꾸는 것이고, 사전 파생은 두 값을 추론하여 결합하는 키-값 쌍처럼 구성됩니다.

그 밖에도 사전 독해든 집합 독해든 목록 독해처럼 if 조건문, 중첩 루프 등이 뒤따를 수 있어 필요에 따라 사용할 수 있습니다.

위 내용은 Python 목록 이해를 적용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제