python 中的分组列表

Grouping list in python

如何通过值连续的分组将列表 A 转换为列表 B? 这意味着 'timeStart_timeEnd_itemName' 如果 first timeEnd 等于 next loop timeStart 和 itemName 是相同的然后追加到像列表 B 这样的子列表组中?

输入

A = ['1070914_1070915_itemA',
     '1070915_1070921_itemA',
     '1070921_1070928_itemA',
     '1071005_1071008_itemA',
     '1071115_1071223_itemA',
     '1071223_1071224_itemA',
     '1071225_1071229_itemB']

结果

B = [['1070914_1070915_itemA',
      '1070915_1070921_itemA',
      '1070921_1070928_itemA'],
     ['1071005_1071008_itemA'],
     ['1071115_1071223_itemA',
      '1071223_1071224_itemA'],
     ['1071225_1071229_itemB']
    ]

这是基于您在我假设的地方分享的示例的解决方案:

  • 您的时间序列列表已根据开始和结束时间排序
  • 列表中没有两个元素重叠 start/end 时间 window

这是实现此目的的示例代码:

my_list = [
    '1070914_1070915_itemA',
    '1070915_1070921_itemA',
    '1070921_1070928_itemA',
    '1071005_1071008_itemA',
    '1071115_1071223_itemA',
    '1071223_1071224_itemA',
    '1071225_1071229_itemB'
]

new_list = [[my_list[0]]]

for a, b in zip(my_list, my_list[1:]):
    a_tup, b_tup = a.split('_'), b.split('_')
    if a_tup[1] != b_tup[0]:
        new_list.append([])
    new_list[-1].append(b)

其中 new_list 将 return 你:

[[
    '1070914_1070915_itemA', 
    '1070915_1070921_itemA', 
    '1070921_1070928_itemA'
 ],[
    '1071005_1071008_itemA'
 ],[
    '1071115_1071223_itemA', 
    '1071223_1071224_itemA'
 ],[
    '1071225_1071229_itemB'
 ]]