+ 2

Почему не работает код? Why this don't work?

prices = [125000, 78000, 110000, 65000, 300000, 250000, 210000, 150000, 165000, 140000, 125000, 85000, 90000, 128000, 230000, 225000, 100000, 300000] count=0 aver=sum(prices)//len(prices) for i in prices: if i>aver: prices.remove(i) print(aver) print(prices)

14th Oct 2021, 8:23 PM
Илья
Илья - avatar
7 ответов
+ 1
when you do list item removed then its size get decreased by 1. list works on indexes. so if list [1,2,3] for i in list: i=1 if you remove 1 then list size is 2 and list is [2,3] in next iteration , i=3 instead of 2 because current index value is 1, not 0 so it skipping 2 (untouched) когда вы удаляете элемент списка, его размер уменьшается на 1. так что если список [1,2,3] для i в списке: я = 1 если вы удалите 1, размер списка будет 2, а список будет [2,3] на следующей итерации i = 3 вместо 2, потому что текущее значение индекса равно 1, а не 0, поэтому 2 пропускаются (нетронутые)
14th Oct 2021, 8:55 PM
Jayakrishna 🇮🇳
+ 1
Не удаляет элементы выше среднего значения. Только часть элементов.
14th Oct 2021, 8:25 PM
Илья
Илья - avatar
+ 1
you're modifying original list in loop so its skipping some items so items.copy() in loop like : вы изменяете исходный список в цикле, поэтому он пропускает некоторые элементы, поэтому prices.copy () в цикле, например: for I in prices.copy() : use a copy instead of original.
14th Oct 2021, 8:31 PM
Jayakrishna 🇮🇳
+ 1
Спасибо. Вы очень помогли. С cooy() всё работает. А почему в цикле пропускаются элементы? По какому принципу он решает что оставить?
14th Oct 2021, 8:38 PM
Илья
Илья - avatar
+ 1
Thak u very match.
14th Oct 2021, 9:06 PM
Илья
Илья - avatar
+ 1
You want to do?
16th Oct 2021, 4:54 PM
CGO!
CGO! - avatar