1

I have seen a similar question OOP python - removing class instance from a list, but the solution is not working for me.

I made a full class test. And the result is not passing the test.

I'm using python 3.4.4

import random

A simple class

class J():
    def __init__(self):
        self.jota = 0

    def up_j(self):
        self.jota = random.choice([2, 0])

    def get_j(self):
        return self.jota

    def __str__(self):
        return str(self.jota)

A list in which I can append instances of the class

a = []

Appending class instances

for i in range(20):
    a.append(J())

Changing it up a bit

for e in a:
    e.up_j()

Here is the FUNCTION I want to get right

def x(a):
    for i, o in enumerate(a):
        if o.get_j() == 0:
           del a[i]
    return a

Applying the function

a = x(a)

Testing! Notice that all numbers in the result should be zero. But that is not the case

for each in a:
    print(each)

Results!

2
2
0
0
...
Community
  • 1
  • 1
B Furtado
  • 1,488
  • 3
  • 20
  • 34

1 Answers1

2

You are removing values from the list while iterating. This almost never works. Instead of deleting values out of the list while iterating, create a new list and append the values you care about (i.e. you wouldn't delete):

def x(a):
    ret = []
    for i, o in enumerate(a):
        if o.get_j() != 0:
           ret.append(o)
    return ret
tkausl
  • 13,686
  • 2
  • 33
  • 50