gpt4 book ai didi

python - 根据属性值将列表拆分为子列表

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:34 25 4
gpt4 key购买 nike

我有一组具有 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 one liner 可以完成我需要的。

最佳答案

虽然不是一行,但是通过使用列表,我们让它更优雅:

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

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

因此,我们在这里初始化一个包含四个空子列表的列表,然后我们将卡片 c 附加到索引为 c.suit.value 的列表。

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

优点是我们避免了排序(这在 O(n log n) 中有效)。因此该算法的时间复杂度为 O(n)(假定列表附加的摊销成本为 O(1))。

虽然单行代码通常很优雅,但编写这些代码时不应该花费太多精力,因为单行代码可能更难理解,或者对性能有重大影响。

关于python - 根据属性值将列表拆分为子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48631076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com