Индексирование для циклов for и while - PullRequest
0 голосов
/ 22 марта 2020

Я путаюсь с реализацией 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.

Может кто-нибудь объяснить это.

Спасибо.

1 Ответ

1 голос
/ 22 марта 2020

Вместо всплывающих элементов, лучше сохранить нужный элемент в новом выпадающем списке, это приведет к ошибке индекса

intervals1 = [1,2,3,4,5,6]
count=0
intervals2 = [4,5,6,7,8,9]
res=[]
for i in range(len(intervals1)):
    for k in range(len(intervals2)):
        if intervals1[i] == intervals2[k]:
            count += 1
            res.append(intervals2[k])
...