Python 목록 유도식이 주의해야 할 점
작성자: Yong Cui, Ph.D.
번역문:번역 계획
본문 영구 링크:github.com/xitu/gold-m…
번역자:samyu2000
교정자:luochen1992 , shixi-li
Python 목록 유도식은 초보자에게 사용되지 않는다. 왜냐하면 그것은 매우 반직감적이기 때문이다. 심지어 다른 프로그래밍 언어의 배경이 있는 사람에게도 마찬가지이기 때문이다.
우리가 List의 사용을 접했을 때 배운 내용은 모두 흩어져 있었다.그래서 우리는 다양한 장면에서 List를 어떻게 사용하는지에 대한 지식 체계가 부족하다.
본고는 가능한 한 여러 방면을 포괄하는 List의 사용 지침을 제공하였다.본문이 당신의 원스톱 실용 수첩이 될 수 있기를 바랍니다.
사용 권장 사항
1. 교체하는 방법을 권장
List를 사용하는 가장 기본적인 방법은 교체 가능한 대상을 바탕으로 List 대상을 만드는 것이다. 이 교체 가능한 대상은 임의의 교체 가능한 요소의Python 대상이 될 수 있다.사용 방법은 다음과 같다.
[expression for item in iterable]
다음 코드는 목록 관련 기술로 List 대상을 만드는 예를 보여 줍니다.이 예에서 우리는 Integer 목록을 정의하고 이 대상을 바탕으로 모든 숫자의 제곱수와 입방수를 저장하는 List 대상을 만들었다.
>>> # Integer
>>> integers = [1, 2, 3, 4, 5, 6]
>>> #
>>> powers = [(x*x, pow(x, 3)) for x in integers]
>>> print(powers)
[(1, 1), (4, 8), (9, 27), (16, 64), (25, 125), (36, 216)]
위의 예에서는 List 객체를 교체기로 사용합니다.우리는 많은 유형의 대상도 교체할 수 있다는 것을 알아야 한다. 예를 들어 List, Set, Dictionary와 String 등이다.다른 데이터 형식, 예를 들어range,map,filter,pandas 패키지의 Series,DataFrame은 모두 교체할 수 있다.다음 코드는 일부 대상의 사용 방법을 보여 준다.
>>> # range
>>> integer_range = range(5)
>>> [x*x for x in integer_range]
[0, 1, 4, 9, 16]
>>> # Series
>>> import pandas as pd
>>> pd_series = pd.Series(range(5))
>>> print(pd_series)
0 0
1 1
2 2
3 3
4 4
dtype: int64
>>> [x*x for x in pd_series]
[0, 1, 4, 9, 16]
2. 만약 그 중의 일부 요소만 사용한다면 조건 판단 문장을 사용해야 한다어떤 조건에 부합되는 요소를 집합시켜list를 만들어야 한다고 가정하십시오.다음은 관련 문법을 보여 준다.
[expression for item in iterable if condition]
if 문장은 조건 판단을 실현하는 데 쓰인다.아래의 코드는 이런 용법의 간단한 예시를 보여 준다.
>>> # Integer
>>> integers = [1, 2, 3, 4, 5, 6]
>>> # ,
>>> squares_of_evens = [x*x for x in integers if x % 2 == 0]
>>> print((squares_of_evens))
[4, 16, 36]
3. 조건판단 문구 사용List 객체에서는 다음과 같은 구문을 사용하여if-else 형식의 조건 판단도 사용할 수 있습니다.
[expression0 if condition else expression1 for item in iterable]
이것은 앞의 그런 용법과 약간 유사하니, 이 두 가지 용법을 혼동하지 마라.이 예에서 조건문 자체는 하나의 전체이다.아래의 코드는 예를 제공했다.
>>> # Integer
>>> integers = [1, 2, 3, 4, 5, 6]
>>> # integers , ,
>>> # ,
>>> custom_powers = [x*x if x % 2 == 0 else pow(x, 3) for x in integers]
>>> print(custom_powers)
[1, 4, 27, 16, 125, 36]
4. 중첩된 구조가 있으면 중첩된 순환을 사용할 수 있다비록 이런 상황은 흔하지 않지만, 교체 가능한 대상 중의 원소 자체도 교체 가능한 것이다.만약 플러그인 교체 대상에 관심이 있다면, for를 사용하여 순환 플러그인을 실현할 수 있습니다.문법은 다음과 같다.
[expression for item_outer in iterable for item_inner in item_outer]
#
for item_outer in iterable:
for item_inner in item_outer:
expression
위의 코드는 for를 사용하여 플러그인 순환을 실현하는 예를 보여 준다.
>>> #
>>> prices = [('$5.99', '$4.99'), ('$3.5', '$4.5')]
>>> # ,
>>> prices_formatted = [float(x[1:]) for price_group in prices for x in price_group]
>>> print(prices_formatted)
[5.99, 4.99, 3.5, 4.5]
5. 고급 함수 교체어떤 사람들은 함수식 프로그래밍에 익숙하다. 예를 들어 고급 함수를 사용하는 것도 이런 습관의 표현 중의 하나이다.특히 고급 함수는 입력이나 출력 파라미터를 사용해야 하는 함수입니다.Python에서 자주 사용하는 고급 함수는map () 과 filter () 입니다.
>>> # integer
>>> integers = [1, 2, 3, 4, 5]
>>> # map
>>> squares_mapped = list(map(lambda x: x*x, integers))
>>> squares_mapped
[1, 4, 9, 16, 25]
>>> #
>>> squares_listcomp = [x*x for x in integers]
>>> squares_listcomp
[1, 4, 9, 16, 25]
>>> # filter integers
>>> filtered_filter = list(filter(lambda x: x % 2 == 0, integers))
>>> filtered_filter
[2, 4]
>>> # integers
>>> filterd_listcomp = [x for x in integers if x % 2 == 0]
>>> filterd_listcomp
[2, 4]
위의 예에서 알 수 있듯이list의 일부 특성을 사용하는 것은 고급 함수를 사용하는 것보다 가독성이 높고 복잡한 끼워넣기 구조를 실현할 수 있다.사용 금지
1. 구조 함수를 정의하는 것을 잊지 마라
어떤 사람들은 목록 유도식이 멋있고 파이썬 특유의 기능이라고 생각하기 때문에 자신의 파이썬 수준을 자랑하기 위해 더 좋은 대안이 있어도 사용해야 한다.
>>> # range
>>> numbers = [x for x in range(5)]
>>> print(numbers)
[0, 1, 2, 3, 4]
>>> # ,
>>> letters = [x.lower() for x in 'Smith']
>>> print(letters)
['s', 'm', 'i', 't', 'h']
상기 예에서 우리는range와string을 사용했는데 이 두 가지 데이터 구조는 모두 교체할 수 있고list () 구조 함수는iterable를 직접적으로list 대상을 만들 수 있다.아래의 코드는 더욱 합리적인 해결 방안을 제공했다.
>>> # range
>>> numbers = list(range(5))
>>> print(numbers)
[0, 1, 2, 3, 4]
>>> # ,
>>> letters = list('Smith'.lower())
>>> print(letters)
['s', 'm', 'i', 't', 'h']
2. 생성기 표현식 잊지 마세요Python에서 생성기는 요청이 있을 때까지 요소를 불러오는 것을 지연시키는 특수한 교체 대상입니다.이것은 대량의 데이터를 처리할 때 매우 효율적이며 저장 효율을 높일 수 있다.이에 비해list 대상은 계수와 색인을 편리하게 하기 위해 모든 요소를 한꺼번에 만듭니다.따라서 생성기에 비해 원소의 개수와 동시에list는 더 많은 메모리를 차지해야 한다.
우리는 생성기를 만들기 위해 생성기 함수를 정의할 수 있다.우리도 다음 문장을 사용하여 생성기를 만들 수 있다. 이것은 생성기 표현식이라고 불리는 방법이다.
(expression for item in iterable)
괄호를 사용하는 것 외에 문법은list를 사용하는 문장과 매우 비슷하다는 것을 알 수 있을 것이다.그래서 구분에 주의해야 한다.아래의 이 예를 고려하다.우리는 백만 개의 숫자의 제곱을 계산해야 한다.list를 사용하면 방법은 다음과 같습니다.
>>> # squares
>>> squares = [x*x for x in range(10_000_000)]
>>> #
>>> sum(squares)
333333283333335000000
>>> squares.__sizeof__()
81528032
list를 사용하는 것보다 generator 메모리를 사용하는 비용이 훨씬 적고 96바이트밖에 안 됩니다.원인은 간단하다. generator는 모든 원소를 얻을 필요가 없다.반대로 각 원소가 서열에 있는 위치를 가져와 다음 원소를 만들고 보여주기만 하면 메모리에 저장할 필요가 없다.결론
본고에서 우리는list 응용의 관건적인 요령을 정리했다.이런 해야 할 일과 하지 말아야 할 일은 모두 매우 명확하다.나는 네가 적당한 장면에서 그것을 사용할 것이라고 생각한다.다음은 본문 내용의 소결이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.