根据属性值将列表分为子列表

用户名

我有一个具有suit属性的对象数组,并且我想根据对象适合的对象拆分为子数组。我目前正在使用此:

    for c in cards:
        if c.suit.value == 0:
            spades.append(c)
        elif c.suit.value == 1:
            diamonds.append(c)
        elif c.suit.value == 2:
            clubs.append(c)
        else:
            hearts.append(c)

我尝试使用itertools.groupby如下:

suits = [list(g) for g in intertools.groupby(cards, lambda x: x.suit.value)]

但这只会产生:

[[3, <itertools._grouper object at 0x000000000296B2E8>], ...]

我的第一种方法有效,我只是想象有一个简单的pythonic衬垫可以满足我的需求。

威廉·范昂塞姆

尽管它不是单线的,但是通过使用列表,我们使它更加优雅:

spades, diamonds, clubs, hearts = collcard = [[] for _ in range(4)]

for c in cards:
    collcard[c.suit.value].append(c)

因此,这里我们用四个空子列表初始化一个列表,然后将卡添加c到带有index的列表中c.suit.value

我们使用迭代拆包将第一个元素分配给spades,将第二个元素分配diamonds,等等。

好处是我们避免排序(在O(n log n)中有效)。因此,该算法具有时间复杂度O(n)(假定列表追加的摊销成本为O(1))。

尽管“单行”通常很优雅,但是编写“单行”时不应该花太多力气,因为“单行”可能会更难理解,或者对性能产生重大影响。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C#根据某个属性的值将列表拆分为子列表?

根据唯一值将列表拆分为子列表

根据边界值将列表拆分为子列表

根据值将列表拆分为子列表

如何根据一列的唯一值将列表拆分为子列表?

根据属性将列表拆分为多个列表

根据元素值将列表划分为多个列表

将列表划分为值之间递增的子列表

通过int值将嵌套列表拆分为子列表

根据数据属性将列表项分组为子列表

根据字符串将字符串列表拆分为子列表列表

Python3.6:根据列表的给定元素将列表分为子列表

根据列表中的值将ArrayList拆分为multipleList

根据文件路径中的子字符串将文件路径列表拆分为子列表

PYTHON:将属性值对列表拆分为多键字典

Erlang基于保留空子列表的值将列表拆分为子列表吗?

如何将列表拆分为包含 Python 中重复值的子列表列表?

根据特定字符串将列表拆分为子列表

根据Java中的字母将按字母顺序排序的列表拆分为子列表

根据存在大小为n的间隙,将列表拆分为子列表

根据Python中的一组索引将列表拆分为子列表

根据字符串拆分将列表拆分为子列表

根据字符串中的整数将列表拆分为子列表

将列表拆分为值列表

将值列表拆分为字典列表

Python根据子列表中的第一个元素将列表拆分为子列表

根据子列表的属性对列表进行排序

根据唯一值python将一个列表分为两个列表

如何根据第一列中的值将python列表分为3个单独的列表?