remove() function iteration problem in python to remove odd/even numbers from list | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 3

remove() function iteration problem in python to remove odd/even numbers from list

CODE link: https://code.sololearn.com/c20HpGq6yw2Q/?ref=app problem: remove function when used in iteration remove only consecutive odd/even numbers (not all)) Please do comment if you got/have idea about this

19th Jan 2021, 9:49 AM
Harshit Jawla
Harshit Jawla - avatar
6 Answers
+ 6
It is because when an element is removed, the next element will be skipped in the next iteration because it follows the index order of elements. Although there is a way to solve this by iterating the index instead of element. Then increment a variable then subtract the index by that variable, so the loop will still follow the index order of the list. See this for example: https://code.sololearn.com/cjAv4915AOdQ/?ref=app
19th Jan 2021, 10:04 AM
noteve
noteve - avatar
+ 5
There is not a problem with it but you are actually modifying original list , so when list encounters first even number, the loop count is at 2 nd element but then using remove method list is reduced to [1,2,2,2,3,5,7] and during next iteration the count loop should be at 3rd element i. e. It will skip the number 2 which is 2nd element.
19th Jan 2021, 9:55 AM
Abhay
Abhay - avatar
+ 5
This is a common problem when using remove() or pop() or del() during iteration. Your list is going to change shape as it has index items removed during the process, but the iteration count will continue causing the code to skip over certain items Example below lst = [2,4,6] for i in lst: if i%2==0: lst.remove(i) print(lst) #[4]
19th Jan 2021, 9:59 AM
Rik Wittkopp
Rik Wittkopp - avatar
+ 3
Harshit Jawla During iteration you can't remove even value because everytime index will change. Remove method remove elements on index based so it is not possible. 2nd way is add odd items in another list.
19th Jan 2021, 10:03 AM
A͢J
A͢J - avatar
+ 3
Thanks to all. I got it. I was searching for it from much time
19th Jan 2021, 10:04 AM
Harshit Jawla
Harshit Jawla - avatar
+ 3
Harshit Jawla You can do like this l = [1, 2, 2, 2, 2, 3, 5, 7] l1 = [] for i in l: if i % 2 == 1: l1.append(i) print(l1)
19th Jan 2021, 10:05 AM
A͢J
A͢J - avatar