Ответ
Ya sh выполняет свою работу.
Другой способ сделать это - определить функцию и вернуть ее, когда точка равна конечной точке.
listA = [
['a','b'], # 0, -5
['b','c'], # 1, -4
['c','d'], # 2, -3
['a','d'], # 3, -2
['b','e'], # 4, -1
]
endpoint = 'c'
def foo(items, endpoint):
for sets in items:
for point in sets:
print(point)
if point == endpoint:
return
foo(listA, endpoint)
Но чтобы ответить на ваш вопрос, почему это не работает, это потому, что второе for
l oop всегда будет выполняться полностью, а значение точки будет всегда будет последним значением последнего набора в список (в данном случае 'e'
). Вот почему while l oop будет работать вечно, поскольку он всегда будет проверять, не является ли 'e' не 'c', оценивающимся как истина.
Если вы хотите сохранить свое старое решение, вы можете сделать это:
listA = [
['a','b'], # 0, -5
['b','c'], # 1, -4
['c','d'], # 2, -3
['a','d'], # 3, -2
['b','e'], # 4, -1
]
endpoint = 'c'
point = ''
while point != endpoint:
for sets in listA:
for point in sets:
print(point)
if endpoint == point:
break
else:
continue
break
Это в основном торможение из вложенных for
циклов, когда point
равно endpoint
.
Как видите, вы проверяете, являются ли точка и конечная точка то же самое дважды (в if endpoint == point
и в while l oop), поэтому while l oop не требуется.