我有此代码:
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
或其他操作的解决方案将无法解决该问题。我的问题与循环的体系结构有关。
答案 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