击中重复项时退出while循环

时间:2019-01-01 10:14:42

标签: python

我有此代码:

steps = [['A', 'B', 'C', 'C', 'C'], ['D', 'E', 'F', 'F', 'F']]

for step in steps:

    while True:
        last_item = ""

        for item in step:
            if item != last_item: 
                print(item)
                last_item = item
            else:
                break

期望的结果是循环打印A,然后B,然后C,但是当击中第一个重复C时,它应该继续打印D,然后是E,然后是F,然后在击中第一个重复F时停止。

这是在Web抓取作业中使用的循环的最小可重复示例,因此涉及对示例set(steps)进行steps或其他操作的解决方案将无法解决该问题。我的问题与循环的体系结构有关。

4 个答案:

答案 0 :(得分:5)

steps = [['A', 'B', 'C', 'C', 'C'], ['D', 'E', 'F', 'F', 'F']]

for step in steps:
  last_item = ""

  for item in step:
      if item != last_item: 
          print(item)
          last_item = item
      else:
          break

当您保持while true并在for循环中遇到中断时,控制将永远不会传递到for循环以获取下一项

  

([['D','E','F','F','F'])

在外部列表中,创建无限循环。

答案 1 :(得分:1)

不需要不需要while True。除此之外,您的代码可以按预期工作:

steps = [['A', 'B', 'C', 'C', 'C'], ['D', 'E', 'F', 'F', 'F']]

for step in steps:

    # while True:
        last_item = ""

        for item in step:
            if item != last_item:
                print(item)
                last_item = item
            else:
                break                      

输出:

A
B
C
D
E
F

答案 2 :(得分:1)

带有while循环的选项,通过索引访问对象:

steps = [['A', 'B', 'C', 'C', 'C'], ['D', 'E', 'F', 'F', 'F']]

i = 0
ii = 0
memo = []
res = []
while True:
  if i == len(steps): break
  e = steps[i][ii]
  if e in memo:
    res.append(memo)
    memo = []
    ii = 0
    i += 1
  else:
    memo.append(e)
    print(e)
    ii += 1

它打印出来:

# A
# B
# C
# D
# E
# F

res值为:

print(res) #=> [['A', 'B', 'C'], ['D', 'E', 'F']]

答案 3 :(得分:0)

从代码中删除while循环。下面的[break]在此循环中有效。为了获得所需的输出,[break]需要打破上面的for循环。

steps = [['A', 'B', 'C', 'C', 'C'], ['D', 'E', 'F', 'F', 'F']]

for step in steps:

# while True:
    last_item = ""

    for item in step:
        if item != last_item:
            print(item)
            last_item = item
        else:
            break