示例
Class car:
def car(color, price, speed):
self.color = color
self.price = price
self.speed = speed
列表car_list
由10个汽车实例生成
car_list = [car1,car2,car3,car4,car5,car6,car7,car8,car9,car10,]
每个汽车对象的颜色,价格和速度值都是随机的。
我想创建一个函数来检查例如2个或更多汽车是否具有相同的颜色。如果是,则仅创建包含这些汽车的列表。
red_cars=[car4,car7,car10]
很多谷歌搜索并没有帮助我入门。
答案 0 :(得分:2)
您对汽车类别的定义是错误的。您不会为其创建构造函数__init__
:
Class car:
def __init__(self, color, price, speed):
self.color = color
self.price = price
self.speed = speed
def is_red(car):
return car.color=="red"
# creating car1, car2, .... , car10 objects here
car_list = [car1,car2,car3,car4,car5,car6,car7,car8,car9,car10,]
您可以使用filter
函数来过滤列表中的对象:
>>> print(filter(is_red, car_list))
# [...list of car objects that their color is red]
答案 1 :(得分:0)
您可以使用列表推导。
如果car_list
是完整列表,并且您想要红色轿车,则可以执行以下操作:
red_cars = [c for c in car_list if c.color == "red"]
无需自定义方法即可使用此方法检查属性值。
但是,正如@shotgunner所说,您应该修复您的类定义。它不像C ++:在python中,构造函数称为__init__
,第一个参数必须为self
。 Here有关python类的更多信息。
答案 2 :(得分:0)
您可以使用以下代码:
car_list = [car1, car2, car3, car4, car5, car6, car7, car8, car9, car10]
dd = {}
for i in range(len(car_list)):
for j in range(len(car_list)):
if i != j:
if car_list[i].color == car_list[j].color:
if car_list[i].color+'_cars' in dd:
dd[car_list[i].color+'_cars'] = dd[car_list[i].color+'_cars']
else:
dd[car_list[i].color+'_cars'] = set()
dd[car_list[i].color+'_cars'].add(car_list[i])
dd[car_list[i].color+'_cars'].add(car_list[j])
print(dd)
我没有创建list
,而是创建了sets
,以便它将自身(从我的代码生成的)重复结果修剪掉。对于变量部分,以上两个答案都使用静态值(即红色)进行条件调整和变量创建。因此,我要做的是创建一个字典,以便可以为每种颜色动态分配键(这是我认为作者想要的)。