【2017-09-21】교체기와 생성기(二)

1836 단어
역방향 교체와 교체 슬라이스
  • 역방향 교체 문제: 역방향으로 서열을 교체하려면 일반적인 방법: 내장된reversed () 함수 사용
  • >>> a=[1,2,3,4,5]
    >>> for x in reversed(a):
        print(x)
    
        
    5
    4
    3
    2
    1
    >>> 
    

    역방향 교체는 대상의 크기를 미리 정하거나 대상이 __reversed__ ()의 특수한 방법을 실현했을 때만 효력이 발생한다.만약 둘 다 맞지 않는다면, 먼저 대상을 목록으로 바꾸어야 한다.만약 교체 가능한 대상이 매우 많은 원소가 있을 때, 매우 많은 메모리를 소모해야 한다.따라서 역방향 교체기를 사용자 정의할 수 있습니다.
    # : ` __reversed__ () ` 
    >>> class CountDown:
        def __init__(self,start):
            self.start=start
        def __iter__(self):
            n=self.start
            while n>0:
                yield n
                n-=1
        def __reversed__(self):
            n=1
            while n<=self.start:
                yield n
                n+=1
    >>> for rr in CountDown(4):
        print(rr)
    
        
    4
    3
    2
    1
    >>> 
    
  • 교체기 슬라이드 문제: 교체기나 생성기에서 슬라이드 조작을 하는데 사전의 길이 위치와 색인 조작을 할 수 없기 때문에 표준 슬라이드 조작은 사용할 수 없다.방법: 함수 itertools.islice () 는 교체기와 생성기에서 슬라이드 작업을 하는 데 적합하다.원리: 슬라이스가 색인 위치를 시작할 때까지 모든 요소를 옮겨다니며 버립니다.그리고 나서 색인 위치가 끝날 때까지 원소를 하나씩 되돌려주기 시작한다.그 중에서 주의해야 할 것은 islice()는 전송된 교체기의 데이터를 소모할 것이다.교체기가 거스를 수 없다는 사실을 고려해야 한다.
  • # CountDown
    >>> cd=CountDown(10)
    >>> cd[2:8]
    Traceback (most recent call last):
      File "", line 1, in 
        cd[2:8]
    TypeError: 'CountDown' object is not subscriptable
    >>> import itertools
    >>> for x in itertools.islice(cd,2,8):
        print(x)
    
        
    8
    7
    6
    5
    4
    3
    >>> 
    

    None 매개 변수는 기본값이며 유사[2:] [:2] 원리로 사용됩니다.
    >>>#  8 
    >>> for x in itertools.islice(cd,2,None):
        print(x)
    
        
    8
    7
    6
    5
    4
    3
    2
    1
    >>>  2 
    >>> for x in itertools.islice(cd,None,2):
        print(x)
        
    10
    9
    >>> 
    

    좋은 웹페이지 즐겨찾기