【问题标题】:How to iterate in a certain order?如何按特定顺序迭代?
【发布时间】:2017-02-19 08:56:54
【问题描述】:

我想知道如何在 Python 中按特定顺序遍历列表。

给定列表lst = [1, 3, -1, 2],我希望我的函数进行迭代,以便迭代的下一个数字将是当前数字值的索引。

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

【问题讨论】:

  • 这是实际要求的问题之一:为什么你想这样做?

标签: python loops for-loop iteration next


【解决方案1】:

您没有指定几个变量:

  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

【讨论】:

  • 很好,但为什么不简单地for i in create_iter(lst): print(i)
  • @zvone 因为这会导致无限循环
  • 啊 :) 好吧,它应该 ;)
  • 请注意,如果一个值位于该值的索引处,那么它将一直重复相同的值
  • @sabbahillel 没错。 OP 没有指定在这种情况下他想要什么行为,但很容易添加 if i == arr[i]: break 和/或 try 块来捕获 IndexError
【解决方案2】:

如果您检查每个值是否都在列表中,除非您必须具有列表结束条件,那么您将拥有

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

请注意,如果列表中的每个条目都是有效索引,那么您将得到一个无限循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2022-06-12
    • 1970-01-01
    相关资源
    最近更新 更多