반복자와 생성자의 종합적인 ...LOGIN

반복자와 생성자의 종합적인 예

반복자와 제너레이터는 기본적으로 상호 운용이 가능하기 때문에 일부 지식 포인트를 함께 통합해야 합니다

1. 역방향 반복

역방향 반복도 처음부터 반복하는 예와 같이 공통 요구 사항이 있습니다. 출력 목록 요소,

list1 = [1,2,3,4,5]
for num1 in list1 :
    print ( num1 , end = ' ' )

1에서 5까지. 그러면 5에서 1까지 무엇을 해야 할까요? 이것도 매우 간단합니다. Python

list1 = [1,2,3,4,5]
for num1 in reversed(list1) :
    print ( num1 , end = ' ' )

내장 함수 reversed()가 있습니다. 방향 반복은 매우 간단하지만, 한 가지 주의할 점은 역 반복은 객체의 크기가 미리 결정될 수 있거나 객체가 있을 때만 발생한다는 것입니다. __reversed__()의 특수 메서드를 구현하여 적용합니다. 둘 다 충족되지 않으면 먼저 객체를 목록으로 변환해야 합니다. 실제로 사용자 정의 클래스에 __reversed__() 메서드를 구현하여 역방향 반복을 구현할 수 있는 경우가 많습니다. 그러나 이전 장에서는 일부 지식 사항이 언급되지 않았지만 프로그래밍 기초가 있는 사람들은 위의 지식 사항을 학습한 후 이해할 수 있을 것입니다.

# -*- coding: UTF-8 -*-
class Countdown:
    def __init__(self, start):
        self.start = start
    def __iter__(self):
    # Forward iterator
        n = self.start
        while n > 0:
            yield n
            n -= 1
    def __reversed__(self):
    # Reverse iterator
        n = 1
        while n <= self.start:
            yield n
            n += 1
for rr in reversed(Countdown(30)):
    print(rr)
for rr in Countdown(30):
    print(rr)

출력 결과는 1~30, 30~1로 각각 순차 인쇄와 역방향 인쇄입니다

2 동시에 여러 시퀀스를 반복합니다

여러 시퀀스를 동시에 반복하고 싶습니다. 매번 하나의 시퀀스에서 요소를 가져옵니다. 그런 필요성을 느낀 적이 있습니까?

여러 시퀀스를 동시에 반복하려면 zip() 함수를 사용하세요. 구체적인 예:

# -*- coding: UTF-8 -*-
names = ['laingdianshui', 'twowater', '两点水']
ages = [18, 19, 20]
for name, age in zip(names, ages):
     print(name,age)

출력 결과:

laingdianshui 18
twowater 19
两点水 20

실제로 zip(a, b)는 튜플( x, y) , 여기서 x는 a에서 나오고 y는 b에서 나옵니다. 시퀀스 중 하나가 끝에 도달하면 반복이 종료됩니다. 따라서 반복 길이는 매개변수에서 가장 짧은 시퀀스의 길이와 일치합니다. 이 문장을 이해하는데 주의하세요. 즉, a와 b의 길이가 일치하지 않으면 가장 짧은 것을 기준으로 삼아 순회가 종료됩니다.

zip() 함수를 사용하면 다음과 같이 키 목록과 값 목록에서 dict(사전)를 생성할 수도 있습니다.

# -*- coding: UTF-8 -*-
names = ['laingdianshui', 'twowater', '两点水']
ages = [18, 19, 20]
dict1= dict(zip(names,ages))
print(dict1)

다음 결과를 출력합니다.

{'laingdianshui': 18, 'twowater': 19, '两点水': 20}

여기서 zip()이 할 수 있는 것을 언급하겠습니다. 두 개가 아닌 두 개 이상의 시퀀스 매개변수를 허용합니다.

다음 섹션
코스웨어