Python Forum
I cannot delete and the elements from the list - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: I cannot delete and the elements from the list (/thread-33625.html)



I cannot delete and the elements from the list - quest - May-11-2021

Hello,
I am trying to run this code. The idea is to compare all elements in the list with another single element. If they are same, process and delete and return the last value. If they are not same just delete:
But I have some troubles in delete part. Here is my code:

def func(queue):
    for index, q in enumerate((queue.copy())): #queue[:]: 
                   if q.idt==OP[1]:
                       a=Operation(q,OP[0])
                       return self.queue.pop(index)
                       #return self.queue.remove(q)
                   elif q.idt < OP[1]:
                       self.unpauli.append(q.idt)
                       self.queue.pop(index)
                       #self.queue.remove(q)
                       #continue
                      
I have no error message but the result is coming wrong. Where is the mistake in the code?


RE: I cannot delete and the elements from the list - perfringo - May-11-2021

Python documentation, The return statement:

Quote:return may only occur syntactically nested in a function definition, not within a nested class definition.

Function is nowhere to be seen.


RE: I cannot delete and the elements from the list - quest - May-11-2021

(May-11-2021, 10:51 AM)perfringo Wrote: Python documentation, The return statement:

Quote:return may only occur syntactically nested in a function definition, not within a nested class definition.

Function is nowhere to be seen.

I just did not paste the beginning of the function but it is not a problem. THe problem is that I cannot delete my elements from the list. I tried a small program for seeing what is going on here and the result is same:
l2=[0,1,2,3,4,5,6,7,8,9]
a=1
l2.copy()
for ind,el in enumerate(l2):   
    if a==el:
       l2.remove(ind)
    else:
       #l2.pop(ind)
       l2.remove(ind)
print(l2)     
it should return an empty list but no !


RE: I cannot delete and the elements from the list - snippsat - May-11-2021

Don't modify an iterator while you're iterating over it,it's a known bad patternđź’€
Will mess up list index and will get your result.
Could add enumerate(l2[:]) to make it work,but still no t good as as remove() has to go over the whole list for every iteration O(n^2).

The solution is to make a new list,then therew is no remove()(that rarely ever need to be used) used in the loop.
l2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a = 1
result = []
for ind, el in enumerate(l2):
    if el != a:
       result.append(el)

print(result)
[0, 2, 3, 4, 5, 6, 7, 8, 9]
Or list comprehension.
>>> l2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [el for el in l2 if el != 1]
[0, 2, 3, 4, 5, 6, 7, 8, 9]



RE: I cannot delete and the elements from the list - perfringo - May-11-2021

"If fact, in any programming language for most part if you mutate something while you iterating over it you living in state of sin and you deserve whatever happens to you" -- Raymond Hettinger, Python core-developer, Transforming Code into Beautiful, Idiomatic Python

What is purpose of l2.copy(). It creates copy but as you don't bind it to the name so it's not accessible, no pointers to it and garbage collector will destroy it. It doesn't have any effect on result of your code.

>>> help(list.copy)
Help on method_descriptor:

copy(self, /)
    Return a shallow copy of the list.