【问题标题】:Get how many (if any) objects of a class are contained in a list获取列表中包含的类的多少(如果有)对象
【发布时间】:2016-08-30 03:00:12
【问题描述】:

您好,这似乎是一个无用的问题,因为我找到了一种方法,但我想知道是否有更快的方法来获取验证某个类的列表的项目数。

到目前为止,我正在做:

items_from_class = 0
for x in Mylist:
    if isinstance(x, Myclass):
        items_from_class += 1
if items_from_class > 2;
    do something ...

我想要适合一行的东西,例如:

if isinstance(x,Myclass) in Mylist > 2:
    do something ...

感谢您的帮助!

【问题讨论】:

  • 是的,如果你找到三个就中断。如果你只想知道是否有三个或更多,那么再检查是没有意义的
  • 是的,目前这就是我所需要的,但我问这个问题是为了更一般的目的,因为我会有其他用途。

标签: list python-2.7 class


【解决方案1】:

令人惊讶的是,人们无缘无故地想要创建列表或 lambda。

if sum(1 for x in items if isinstance(x, MyClass)) > 2:
    ## do stuff

【讨论】:

    【解决方案2】:

    您可以根据您的要求使用以下代码

    myClassElements = [ x for x in itemList if isinstance(x,MyClass) ]
    if len(myClassElements) > 2:
       ...do something
    

    希望能回答你的问题

    【讨论】:

    • 投反对票是因为它效率低下,是吗?我发布这个的原因是解释器可以进行优化并且代码更具可读性。代码也符合要求。
    • 低效是什么意思?按照@Padraic Cunningham 的建议,使用“休息”来坚持我的配方会更好吗?我正在用 Pygame 开发一个 2D 游戏,所以我认为使用你的建议应该没问题,因为游戏总体要求不太高。
    • (my) downvote 是因为它只是草率的代码 - 创建一个完整的列表,只是为了获取列表的长度,当您不打算再次使用该列表时。当然,它有效,但原始帖子也有效;重点是编写更好的代码,其中包含更多Pythonic。
    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2014-03-27
    • 2013-11-09
    • 2020-11-22
    • 2020-06-10
    • 1970-01-01
    相关资源
    最近更新 更多