我如何在中间迭代中暂停列表并开始向后走



如果通过事件列表进行迭代,我该如何在某个条件下停止并通过列表向后迭代。例如

for p in pattern:
    for event in p:
        if event == 1:
        # Iterate backwards through p from current position until you reach the last event that equals 1

我认为您可以使用诸如reversed(p)之类的东西,但这将从p的末尾开始,我想开始从当前位置进行查看。

循环的python无效,我认为您期望它的期望。当您在此处致电for时,Python实际上将p[i]分配给变量event的新副本。它没有下一个对象或先前的对象。

如果您想知道当前的位置是什么,则需要使用enumerate()函数。

for index, event in enumerate(p):
    print(index, event)

这将允许您打破循环或创建另一个subloop,然后使用reversed()或类似的东西从指定点重新换句。

您的代码看起来像:

for p in pattern:
    for index, event in enumerate(p):
        if event == 1:
            for event2 in reversed(p[:index]):
                # do the things

我假设您不需要枚举逆转。如果您这样做,将最内向的for语句更改为for in enumerate(reversed(p[:index]):应该可以做到。

,我使用了其他事件变量,以防您想引用最初向您降低逆转的变量。如果您不需要该功能,那不是必需的。

选项2:

可以使用p.index(event)值完成另一种方法(感谢@Scott(。它的pythonic少了,会打破您现有的循环(也许可能不重要(,但确实可以。

for p in pattern:
    for event in p:
        if event == 1:
            new_start = p.index(event)
for p in reversed(p[:new_start]):

要反向方向,您需要在迭代时记住位置索引。枚举((内置功能将有所帮助。

找到反转条件后,请使用列表切片来隔离要向后重复的部分。 reversed((内置将从那里拿走。

>>> loe = ['e0', 'e1', 'e2', 'e3', 'e4', 'e5']
>>> for i, event in enumerate(loe):
        print event
        if event == 'e3':
            for event in reversed(loe[:i]):
                print event
            break

e0
e1
e2
e3
e2
e1
e0

希望这会有所帮助: - (

只需记录索引,然后向后启动遍历:应该看起来像这样。

pattern = [[3,4,5],[7,8,9],[3,2,1,5,7,1],[8,1,8,8,1]]
for i in range(0, len(pattern)):
  for j in range(0, len(pattern[i])):
    print(pattern[i][j])
    if(pattern[i][j] == 1):
      print("found a event equals to 1")
      if(j == 0):
        print(" but its at the start of the list so there are no event equals to 1 before")
      else:
        reserveStartingIndex = j - 1 #to exclude itself 
        for r in range (reserveStartingIndex, 0, -1):
          if(pattern[i][r] == 1):
            print("found a event equals to 1 before at the index of: " + repr(r) )
          elif(r == 0):
            print("no event equals to 1 before")

您会得到这样的结果:

3
4
5
7
8
9
3
2
1
found a event equals to 1
5
7
1
found a event equals to 1
found a event equals to 1 before at the index of: 2
8
1
found a event equals to 1
8
8
1
found a event equals to 1
found a event equals to 1 before at the index of: 1

最新更新