首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中对嵌套属性列表进行分组

在Python中对嵌套属性列表进行分组
EN

Stack Overflow用户
提问于 2018-06-27 02:25:22
回答 2查看 77关注 0票数 0

我有一个清单

代码语言:javascript
复制
lst = ['orb|2|3|4', 'obx|2|3|4', 'orb|2|3|4', 'obx|1|2|3', 'obx|1|2|3','obx|1|2|3']

我如何根据最初的三行对列表进行分组,最终结果是这样的。分组发生在该行的三个字符上。如果该行以"orb“开头,则后续行将添加到以该行开头的列表中。谢谢你的回答。

代码语言:javascript
复制
result = [['orb|2|3|4', 'obx|2|3|4'], ['orb|2|3|4', 'obx|1|2|3', 'obx|1|2|3','obx|1|2|3']]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-27 07:01:37

下面是一个O(N)复杂度的算法:

代码语言:javascript
复制
res = []
tmp = []
for x in lst:
    if x.startswith('orb'):
        if tmp:
            res.append(tmp)
        tmp = [x]
    elif tmp:
        tmp.append(x)
res.append(tmp)

结果:

代码语言:javascript
复制
In [133]: res
Out[133]:
[['orb|2|3|4', 'obx|2|3|4'],
 ['orb|2|3|4', 'obx|1|2|3', 'obx|1|2|3', 'obx|1|2|3']]
票数 1
EN

Stack Overflow用户

发布于 2018-06-27 02:28:38

您可以使用itertools.groupby

代码语言:javascript
复制
import itertools, re
lst = ['orb|2|3|4', 'obx|2|3|4', 'orb|2|3|4', 'obx|1|2|3', 'obx|1|2|3','obx|1|2|3']
new_result = [list(b) for _, b in itertools.groupby(lst, key=lambda x:re.findall('^\w+', x)[0])]
final_result = [new_result[i]+new_result[i+1] for i in range(0, len(new_result), 2)]

输出:

代码语言:javascript
复制
[['orb|2|3|4', 'obx|2|3|4'], ['orb|2|3|4', 'obx|1|2|3', 'obx|1|2|3', 'obx|1|2|3']]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51049340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档