如何在列表中查找具有相同值的对象并使用这些对象创建新列表?

时间:2019-03-18 11:07:40

标签: python

示例

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]

很多谷歌搜索并没有帮助我入门。

3 个答案:

答案 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__,第一个参数必须为selfHere有关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,以便它将自身(从我的代码生成的)重复结果修剪掉。对于变量部分,以上两个答案都使用静态值(即红色)进行条件调整和变量创建。因此,我要做的是创建一个字典,以便可以为每种颜色动态分配键(这是我认为作者想要的)。