按对象类型拆分包含对象的python列表

按对象类型拆分包含对象的python列表,python,python-3.x,list,Python,Python 3.x,List,我尝试了以下方法,似乎效果不错。问题是这是蟒蛇式的方式吗?我的实际代码是非常复杂的继承。我正在尝试检查并将更新。谢谢 class A: def __repr__(self): return "A" class B: def __repr__(self): return "B" class C: def __repr__(self): return "C" def split_by_type(object_list, o

我尝试了以下方法,似乎效果不错。问题是这是蟒蛇式的方式吗?我的实际代码是非常复杂的继承。我正在尝试检查并将更新。谢谢

class A:
    def __repr__(self):
        return "A"

class B:
    def __repr__(self):
        return "B"

class C:
    def __repr__(self):
        return "C"

def split_by_type(object_list, obj_type):
    final, inter = [], []
    for obj in object_list:
        if isinstance(obj, obj_type):
            if inter:
                final.append(inter)
            inter = [obj]
        else:
            inter.append(obj)
    final.append(inter)
    return final
输入
[A1、B1、C1、A2、B2、A3、C3、A4、B4、C4]

输出
[[A1,B1,C1],[A2,B2],[A3,C3],[A4,B4,C4]

object_list = [A(), B(), C(), A(), B(), A(), C(), A(), B(), C()]
print(split_by_type(object_list, A)) # ==> [[A, B, C], [A, B], [A, C], [A, B, C]]

您可以使用
itertools.groupby
itertools.count

object_list = [A(), B(), C(), A(), B(), A(), C(), A(), B(), C()]

from itertools import groupby, count

c = count()
out = [[o[1] for o in g] for v, g in groupby(enumerate(object_list), lambda o: o[0]-[next(c), next(c)][-1] if isinstance(o[1], A) else o[0]-next(c))]

print(out)
印刷品:

[[A, B, C], [A, B], [A, C], [A, B, C]]

如果您想了解如何改进代码,请尝试:我问这个问题是因为我没有解决方案。然后我想不试着问是不好的。然后我试了一下。我不知道这是否会奏效。对于示例代码,它正在工作。谢谢如果没有人感兴趣,我会采取行动。这对我来说没问题,所以你目前的方法没问题,那么我think@NathanMcCoy您将解析到
groupby
key
函数是什么?(
lambda x:isinstance(x,obj_类型))
当然不起作用)感谢您理解我的问题并提供帮助。还有一个问题。如何在外部访问内部列表中的变量
o
[o[1]来表示o in g]?这是因为副作用还是正常行为。我闻到了一种我从未理解的结束的味道。@Rahul没有结束
groupby()
返回两个变量
v
->分组和迭代器
g
中使用的键。我只是在列表理解中迭代
g
,并从元组中提取第二个元素(注意
groupby()
中的
enumerate()
)哦!。我懂了。由于在lambda中再次重用变量
o
,我感到困惑。因此,在
[o[1]中的
o
lambda o:o[0]…
不同。是吗?@Rahul是的,他们是不同的。