2016-10-10 3 views
-3

Мне интересно, как я могу перебирать список в определенном порядке в Python.Как выполнять итерацию в определенном порядке?

Учитывая список, lst = [1, 3, -1, 2], я хочу, чтобы моя функция повторялась так, что следующий номер, итерированный выше, будет индексом значения текущего числа.

LST [0] -> LST [1] -> LST [3] -> LST [2] 1 -> 3 -> 2 -> -1

+1

Это один из тех вопросов, которые его практически просят: ** почему ** вы хотели бы это сделать? – MisterMiyagi

ответ

3

Есть несколько переменных, которые у вас есть не указано:

  1. Какая обработка ошибок должна включать это?
  2. Вы хотите, чтобы он зацикливался на неопределенное время?

Предполагая, что соответствующие ответы не являются «Нет» и «Да», вот один из способов сделать это:

def create_iter(arr): 
    i = 0 
    while True: 
     yield arr[i] 
     i = arr[i] 

lst = [1,3,-1,2] 
my_iterator = create_iter(lst) 

Это дает:

>>> for _ in range(10): 
>>> print (next(my_iterator)) 
1 
3 
2 
-1 
2 
-1 
2 
-1 
2 
-1 
+0

Хорошо, но почему бы не просто 'for i в create_iter (lst): print (i)'? – zvone

+0

@zvone Потому что это приводит к бесконечному циклу – brianpck

+0

А это :) Ну, это должно;) – zvone

0

Учитывая, что вы убедитесь, что каждый значение находится в списке, за исключением того, что у вас должно быть условие окончания списка, тогда у вас будет

index = 0 
while True: 
    newindex = mylist[index] 
    if newindex >= len(mylist): 
     break 
    elif newindex == index: 
     break 
    else: 
     index = newindex 

Обратите внимание, что если каждая запись в списке является допустимым индексом, вы получите бесконечный цикл.