在此代码中删除对象的最快和pythonic方式

1 python

这是我想要做的示例代码...

class A():
number = 0
List = []
for i in range(5):
    state = A()
    state.number = i
    List.append(state)
print List
Numbers = [1,2,3]
Run Code Online (Sandbox Code Playgroud)

现在,我想在其列表中删除类的对象numberNumbers.最快的方法是什么?此外,如果有人可以建议更多的pythonic方式这样做,而不是简单地创建两个for循环,一个用于Numbers其他的循环List,然后从中删除List.

Joc*_*zel 8

首先,而不是像下面A.number那样有一个类变量:

class A():
    number = 0
Run Code Online (Sandbox Code Playgroud)

你通常应该编写一个只在实例上__init__设置的方法number.

class A(object):
    def __init__(self, number):
        self.number = number
Run Code Online (Sandbox Code Playgroud)

现在,您的其余代码可以简单地编写为:

List = [A(i) for i in range(5)]
print List
Run Code Online (Sandbox Code Playgroud)

要有效地查找项目(没有两个循环),您需要设置:

Numbers = set([1,2,3]) 
Run Code Online (Sandbox Code Playgroud)

x in Numbers现在需要不断的时间.否则,Python必须遍历List才能找到一个数字.

您想要的结果如下:

filtered = [a for a in List if a.number in Numbers]
Run Code Online (Sandbox Code Playgroud)

  • @ THC4k:所有实例之间不共享`number`:http://codepad.org/r9itOCcK.`(instance).number`只会设置`number`属性.来自[docs](http://docs.python.org/tutorial/classes.html#instance-objects):*根据定义,作为函数对象的类的所有属性都定义其实例的相应方法.*如果是attribute不是一个函数,它不会在实例上定义. (3认同)