如何从清单中取出某些物品

时间:2019-11-04 18:35:34

标签: python

我想从具有特定实例的列表中返回某些项目。

我不清楚如何使用isinstance,但是据我所知,这似乎是最好的方法。

animals = [Hen(0.25), Hen(0.6), Hen(1.0), Hen(8), Rooster(0.25), Rooster(0.6), Rooster(1.0), Cow(1.0), Goat(1.0), Duck(1.0)]


def get_class(animals):
    if not isinstance(animals, Hen):
        return NotImplemented
    return animals

我想让列表中的动物现在只有Hen(0.25),Hen(0.6),Hen(1.0),Hen(8)。任何帮助将不胜感激,但我宁愿只是指导而不是答案。

2 个答案:

答案 0 :(得分:5)

您可能可以使用列表理解来实现:

new_animals = [x for x in animals if isinstance(x, Hen)]

这基本上会构建一个新列表,其中仅包含作为Hen类实例的项目。

种类无关,但是要以自己想要的干净方式表示Hen()类,您可以执行以下操作:

In [25]: class Hen():
    ...:     def __init__(self, number):
    ...:         self.a = number
    ...:     def __repr__(self):
    ...:         return "Hen({})".format(self.a)
    ...:

In [26]: h = Hen(4.5)

In [27]: h
Out[27]: Hen(4.5)

希望这会有所帮助!

答案 1 :(得分:1)

这是示例代码

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class Car:
    def __init__(self, make, year):
        self.make = make
        self.year = year

def get_person_objs(objs):
    return [obj for obj in objs if isinstance(obj, Person)]

persons = get_person_objs([Person("Peter", 12), Person("Tom", 23), Car("Toyota", 1998)])

for person in persons:
    print(person.name)