2015-12-26 4 views
-1

Допустим, у меня есть этот массив:проверка следующего элемента для цикла

arr = ["foo","bar","hey"] 

Я могу напечатать "foo" строки с этим кодом:

for word in arr: 
    if word == "foo": 
     print word 

Но я хочу также проверить следующий word если он равняется "bar", тогда он должен напечатать "foobar"

Как проверить следующий элемент в цикле for?

+0

Почему бы не использовать '' elif' или else' ? –

+0

Вы можете получить ответ, который вы ищете, просмотрев [2395160] (http://stackoverflow.com/questions/2395160/what-is-the-correct-syntax-for-else-if) – cynicaljoy

+1

@EliKorvigo: I что OP просто хочет иметь доступ к текущему и следующему элементу. –

ответ

3
for i in range(len(arr)): 
    if arr[i] == "foo": 
     if arr[i+1] == 'bar': 
      print arr[i] + arr[i+1] 
     else: 
      print arr[i] 
+3

Я верю, что более питоническим способом будет использование 'enumerate()', а не итерация на основе 'len' списка. – zayora

+0

Да, это определенно лучший способ сделать это с помощью 'enumerate()' –

2

Элементы в списке могут быть указаны по их индексу. Используя метод enumerate() получить итератор вместе с каждым элементом списка (предпочтительнее шаблоном С инстанцированием и приращения самостоятельно), вы можете сделать это так:

arr = ["foo","bar","hey"] 

for i, word in enumerate(arr): 
    if word == "foo" and arr[i+1] == 'bar': 
     print word 

Однако, когда вы дойдете до конца в списке вы столкнетесь с IndexError, который необходимо обработать, или вы можете получить длину (len()) из списка и обеспечить i < max.

0

Вместо проверки для следующего значения, отслеживать предыдущая:

last = None 
for word in arr: 
    if word == "foo": 
     print word 
    if last == 'foo' and word == 'bar': 
     print 'foobar' 
    last = word 

Отслеживание, что вы уже прошли легче, чем заглядывать вперед.

0

Вы также можете сделать это с молнией:

for cur, next in zip(arr, arr[1:]): 
    if nxt=='bar': 
     print cur+nxt 

Но имейте в виду, что число итераций будет только два, так как len(ar[1:]) будет 2

Смежные вопросы