2014-05-13 5 views
-4

for 루프에서 다음 루프를 진행하지 않고 다음 단어를 처리하기 위해 next()를 사용하고 싶습니다.for 루프를 사용하지 않고 for 루프에서 파이썬 next()를 사용합니다.

words = ["please", "do", "loop", "in", "order"] 
for word in words: 
    print word 
    checknextword = str(next((word for word in words), None)) 

따라서, 나는 인쇄 할 :

>>>please 
>>>do 
>>>loop 
>>>in 
>>>order 

을하지만 코드를 생성합니다

words = ["please", "do", "loop", "in", "order"] 

for i,j in map(None, words, words[1:]): #j will contain the next word and None if i is the last element of the list 
    print i 

[OUTPUT] 
please 
do 
loop 
in 
order 
+11

여기에서 수행하려는 작업이 명확하지 않습니다. 예제 출력은'for word in word : print (word)'라는 간단한 형식으로 생성됩니다. –

+0

문제를 재현 할 수 없습니다. – thefourtheye

+0

어쩌면 당신은 다음과 같은 것을 원할 것입니다. http://stackoverflow.com/questions/6822725/rolling-or-sliding-window-iterator-in-python – M4rtini

답변

3

당신은 모두를 가질 수 있습니다

>>>please 
>>>loop 
>>>order 
+1

'words [: - 1]'을 지정할 필요가 없습니다; 'zip'은 가장 짧은 인수의 길이 (이 경우, 초)로 출력을 절단합니다. – jonrsharpe

+0

@jonrsharpe : true. 나는 그것을 더 명백하게 발견한다. – njzk2

1

당신은 그것을 할 수 있습니다 현재 및 다음 단어 사용 :

for word, next_word in zip(words[:-1], words[1:]): 
    print word 
    checknextword = next_word 
0

귀하의 질문은 명확하지 않습니다. 왜 다음 항목에 액세스하고 싶은지, 그리고 무엇을하고 싶습니까? 그냥 다음 항목에 액세스하려면

itertools package의 설명서에 좋은 recipe for pairwise iteration을있다 :이 수

def pairwise(iterable): 
    "s -> (s0,s1), (s1,s2), (s2, s3), ..." 
    a, b = tee(iterable) 
    next(b, None) 
    return izip(a, b) 

하나에서 항목 목록에서 다음 항목을 통해 모든 반복 샷 (당신이 목록의 마지막에 문제가있을 수 있습니다하지만 -하지만 어쨌든, 당신이 원하는 것을 분명하지 않다) :

words = ["please", "do", "loop", "in", "order"] 
for word, nextword in pairwise(words): 
    ### do something with word 
    ### do something else based on next word 
0

그것은 "나는 촬영을하지 않고 내 총을 형성 발사 할"처럼 .

next() 메서드는 생성자와 함께 호출되어야하며 한 단계 더 나아가 다음 항목을 검색해야합니다. 발전기에서 호출하면 주어진 발전기에 대해 한 단계 더 나아가거나 StopIteration을 발생시킵니다.

next에서 다음 항목을 가져 오는 것이 좋습니다. 루프에서 사용하는 반복기와 동일한 반복기에서 호출하면 루프를 검색하지만 한 단계 더 발전시킬 것입니다. 답변 바이 sshashank124이 가능한 솔루션을 제공합니다.

또 다른 해결책은 목록의 현재 색인을 추적하고 하나의 색인 인 항목을 얻는 것입니다.

관련 문제