python 목록 유도 및 생 성기 표현 식 사용
서열 이란 한 조 의 데 이 터 를 말 하 는데 저장 유형 에 따라 용기 서열 과 평면 서열 로 나 누고 수정 여부 에 따라 가 변 서열 과 가 변 서열 로 나 뉜 다.
용기 시퀀스 와 평면 시퀀스
용기 서열 은 list,tuple,collections.deque 를 포함 하여 대상 의 인용 을 저장 합 니 다.
편평 한 서열 은 str,bytes,bytearray,memory view 와 array.array 를 포함 하여 대상 의 값 을 저장 합 니 다.
평면 시퀀스 의 값 은 문자,바이트,수치 와 같은 기본 형식 입 니 다.
가 변 시퀀스 와 가 변 시퀀스
tuple,str,bytes 를 포함 하여 가 변 적 이지 않 은 시퀀스 입 니 다.
list,by tearray,array.array,collection.deque,memory view 를 포함 한 가 변 시퀀스 입 니 다.
다음 그림 왼쪽 은 부모 클래스 이 고 오른쪽 은 하위 클래스 입 니 다.가 변 서열 은 가 변 서열 로 계승 되 지 않 고 가 변 방법 을 확장 한 것 을 알 수 있 습 니 다.
목록 유도
Python 언어의 매력 은 간결 함 에 있 습 니 다.이것 은 가장 흔히 볼 수 있 는 생 성 목록 에서 나타 날 수 있 습 니 다.예 를 들 어 우 리 는 문자열'abc'를 새로운 목록 으로 바 꾸 고 싶 습 니 다.['a','b','c'],일반적인 표기 법:
symbols = "abc"
codes = []
for symbol in symbols:
codes.append(symbol)
print(codes) # ["a", "b", "c"]
for 순환 과 목록 append 방법 을 사 용 했 습 니 다.실제로 append 방법 을 사용 하지 않 고 직접:
symbols = "abc"
codes = [symbol for symbol in symbols]
이것 은 목록 유도 라 고 하 는데 더욱 Pythonic 의 서법 이다.작성 효율 이 든 읽 을 수 있 든 목록 추론 이 한 수 위 이 며 목록 을 구축 하 는 빠 른 방법 이 라 고 할 수 있 습 니 다.그러나 남용 해 서 는 안 된다.유 니 버 설 원칙 은 목록 에서 유도 하 는 코드 가 두 줄 을 넘 으 면 append 를 사용 하 는 것 을 고려 해 야 한 다 는 것 이다.규정 이 아니 라 자기 취향 으로 선택 할 수 있다.
피리 칼 적 은 여러 서열 에서 요소 의 모든 조합 을 말 합 니 다.우 리 는 목록 으로 피리 칼 적 을 유도 합 니 다.
colors = ["black", "white"]
sizes = ["S", "M", "L"]
tshirts = [(color, size) for color in colors for size in sizes]
코드 한 줄 완성!Life is short,use Python,list comprehension is wonderful,amazing。이 줄 코드 는 두 개의 for 순환 이 있 습 니 다.등가:
for color in colors:
for size in sizes:
실행 결 과 는:
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]
순 서 를 바 꾸 면:
[(color, size) for color in colors for size in sizes]
등가:
for size in sizes:
for color in colors:
실행 결 과 는 다 릅 니 다.두 번 째 요 소 를 관찰 합 니 다.
[('black', 'S'), ('white', 'S'), ('black', 'M'), ('white', 'M'), ('black', 'L'), ('white', 'L')]
생 성기 식일반적으로 생 성 기 를 접 할 때
yield
키 워드 를 말 해 야 합 니 다.복잡 해 보이 지만 간단 합 니 다.생 성 기 는 목록 유도 와 같이 다른 유형의 서열 을 만 드 는 데 사 용 됩 니 다.예 를 들 어 원 그룹:
symbols = "abc"
codes = (symbol for symbol in symbols)
그것 의 문법 은 매우 간단 하 다.목록 에서 유도 하 는 중 괄호[]를 작은 괄호()로 바 꾸 면 된다.문법 은 비슷 하지만 본질 적 으로 큰 차이 가 있 습 니 다.우 리 는 생 성기 표현 식 으로 피리 칼 적 을 실현 하고 어떤 변화 가 있 는 지 보 려 고 합 니 다.
colors = ["black", "white"]
sizes = ["S", "M", "L"]
tshirts = ((color, size) for color in colors for size in sizes)
실행 결 과 는:
<generator object <genexpr> at 0x000001FD57D2DB30>
generator object,결 과 는 생 성기 대상 입 니 다.생 성기 표현 식 은 매번 교체 할 때마다 요 소 를 하나씩 생산 하기 때문에 이 결 과 는 이미 만들어 진 원 그룹 이 아 닙 니 다.목록 추 도 는 새로운 목록 의 모든 요 소 를 한꺼번에 생 성 합 니 다.생 성기 표현 식 결 과 를 반복 해서 출력 합 니 다:
for tshirt in tshirts:
print(tshirt)
('black', 'S')
('white', 'S')
('black', 'M')
('white', 'M')
('black', 'L')
('white', 'L')
생 성기 표현 식 은 프로그램 성능 을 향상 시 킬 수 있 습 니 다.예 를 들 어 각각 1000 개의 요소 가 있 는 두 개의 목록 을 계산 하 는 피리 칼 적 을 계산 하려 면 생 성기 표현 식 은 for 순환 을 실행 하 는 비용 을 줄 일 수 있 습 니 다.즉,100 만 개의 요 소 를 포함 하 는 목록 입 니 다.yield 역할 과 return 차이 가 많 지 않 습 니 다.나중에 말씀 드 리 겠 습 니 다.
Tips
이 소절 의 내용 은 내 가 《유창 한 파 이 썬》 을 보 았 을 때 기록 한 지식 이다.
a = [x for x in something]
이라는 표기 법 을 말한다.b = tuple(x for x in something)
.array.array('I', x for x in something)
,array 구조 방법의 첫 번 째 매개 변 수 는 배열 의 숫자 저장 방식 을 지정 했다.for tshirt in [c, s for c in colors for s in sizes]
,목록 추 도 는 이 목록 을 한꺼번에 생 성하 여 메모리 에 저장 하고 자원 을 점용 합 니 다.for tshirt in ('%s %s' for c in colors for s in sizes)
,생 성기 표현 식 은 순환 할 때 만 요 소 를 하나씩 생산 하여 추가 메모리 사용량 을 피하 고 for 순환 을 실행 하 는 비용 을 절약 합 니 다.본 고 는 먼저 서열 의 개념 을 소개 한 다음 에 Python 의 일반적인 소 작업 인 목록 추 도 를 보 여 주 었 고 마지막 으로 생 성기 표현 식 이라는 복잡 하고 간단 해 보 이 는 문법 을 이 끌 어 냈 다.목록 은 가 변 적 이다.가 변 적 이지 않 은 쌍둥이 형제,원조 가 있다.
참고 자료:
《유창 한 파 이 썬》
이상 은 python 목록 유도 와 생 성기 표현 식 사용 에 대한 상세 한 내용 입 니 다.python 목록 유도 와 생 성기 표현 식 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.