Я путаюсь с реализацией al oop в python при работе со списками.
пример: эта реализация всегда выбрасывает индекс списка из-за ошибки диапазона, потому что список отличается на каждой итерации, а длина (интервалы) всегда меняется.
for i in range(len(intervals1)):
for k in range(len(intervals2)):
if intervals1[i] == intervals2[k]:
count += 1
else:
intervals2.pop(k)
, а вторая реализация -
for i in intervals1:
for k in intervals2:
if i == k:
count += 1
else:
intervals2.remove(k)
Вторая реализация работает нормально, но первая всегда дает сбой. Я думаю, что мы никогда не сможем работать с индексированным подходом, используя циклы for, когда мы удаляем / выталкиваем что-то из списка или изменяем количество элементов в списке.
Может, кто-нибудь предоставит обходной путь, если мы хотим использовать индексированный подход с первой реализацией.
Одна из реализаций, которую я обнаружил, заключается в использовании циклов while, почему это работает, несмотря на то, что он использует подход, основанный на индексировании, но для циклов не работает -
intervals1 = [1,2,3,4,5,6]
intervals2 = [4,5,6,7,8,9]
i=0
while i < len(intervals2):
if intervals1[i] == intervals2[i]:
count +=1
else:
intervals2.pop(i)
intervals1.pop(i)
print(intervals1)
print(intervals2)
Если это тоже не сработает так как он динамически вычисляет длину интервалов. Возможно, причина в том, что он не использует счетчик как l oop, он может использовать его внутри l oop.
Может кто-нибудь объяснить это.
Спасибо.