首页 > 解决方案 > 在 Python 中对嵌套属性列表进行分组

问题描述

我有一个清单

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”开头,则后续行将添加到以该行开头的列表中。感谢你的回答。

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']]

标签: pythonlist

解决方案


这是一个O(N)复杂的算法:

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)

结果:

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']]

推荐阅读