python – 根据属性值将列表拆分为子列表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 根据属性值将列表拆分为子列表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1029字,纯文字阅读大概需要2分钟。
内容图文
![python – 根据属性值将列表拆分为子列表](/upload/InfoBanner/zyjiaocheng/757/55dfe163679b400997bb4f0752dbb1da.jpg)
我有一个具有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的列表中.
我们使用可迭代的解包将第一个元素分配给黑桃,第二个元素分配给钻石等.
优点是我们避免排序(在O(n log n)中工作).因此该算法具有时间复杂度O(n)(给定列表追加的摊销成本为O(1)).
虽然oneliner通常是优雅的,但是不应该花费太多精力来写这些内容,因为oneliner可能更难理解,或者对性能有重大影响.
内容总结
以上是互联网集市为您收集整理的python – 根据属性值将列表拆分为子列表全部内容,希望文章能够帮你解决python – 根据属性值将列表拆分为子列表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。