2014-03-03 5 views
1

next()에 I read the documentation 그리고 나는 그것을 추상적으로 이해합니다. 내가 아는 바로는 next()는 반복 가능한 객체에 대한 참조로 사용되며 파이썬을 다음 반복 가능한 객체로 순차적으로 순환시킵니다. 말이된다! 내 질문에, 루프 내에서 어떻게 유용할까요? 언제 누군가가 next()를 직접 사용해야합니까? 누군가 단순한 예를 제시 할 수 있습니까? 고마워요!내장 next() 함수에 대한 이해

+0

이 관련 보인다 http://stackoverflow.com/questions/10414210/python-why-should-i-use-next-and-not-obj-next – Dan

+0

이러한 종류의 메소드는, 포인터를 객체에 반복 해 넣을 때에 만 유용합니다. 해당 목록 (또는지도)의 메모리 주소입니다. 목록 (외부 루프)에 대한 간단한 액세스를 위해 키 - 카운터 원칙을 사용해야합니다. –

답변

2

예를 들어 next을 사용할 수있는 곳이 많이 있습니다.

파일을 읽는 동안 헤더를 버립니다. zip(seq, seq[1:]) (pairwise recipe iterools)에서의

with open(filename) as f: 
    next(f) #drop the first line 
    #now do something with rest of the lines 

반복자 기반 구현 :

from itertools import tee, izip 
it1, it2 = tee(seq) 
next(it2) 
izip(it1, it2) 

조건을 만족하는 제 항목 얻기 :

next(x for x in seq if x % 100) 

키 값과 인접하는 항목을 이용하여 사전 생성을 :

>>> it = iter(['a', 1, 'b', 2, 'c', '3']) 
>>> {k: next(it) for k in it} 
{'a': 1, 'c': '3', 'b': 2} 
4

운에는 그것이 있기 때문에, 나는 한 어제 쓴 :

def skip_letters(f, skip=" "): 
    """Wrapper function to skip specified characters when encrypting.""" 
    def func(plain, *args, **kwargs): 
     gen = f(p for p in plain if p not in skip, *args, **kwargs)    
     for p in plain: 
      if p in skip: 
       yield p 
      else: 
       yield next(gen) 
    return func 

이 발전기 기능 f의 반환 값을 얻을 수 next를 사용하지만, 다른 값 산재. 이렇게하면 일부 값이 생성기를 통과 할 수 있지만 다른 값은 곧바로 생성됩니다.

1

next은 for-loop 외부에서도 다양한 방법으로 유용합니다. 당신이 객체의 반복자가 있고이 조건을 만족하는 첫 번째하려는 경우 예를 들어, 당신과 같이 그것을 generator expression를 제공 할 수 있습니다 :

>>> lst = [1, 2, 'a', 'b'] 
>>> # Get the first item in lst that is a string 
>>> next(x for x in lst if isinstance(x, str)) 
'a' 
>>> # Get the fist item in lst that != 1 
>>> lst = [1, 1, 1, 2, 1, 1, 3] 
>>> next(x for x in lst if x != 1) 
2 
>>> 
관련 문제