从列表中删除组和子组

问题描述 投票:0回答:1

所以我有两个项目清单:

item_list = [
    'item 01-01-01', 'item 01-01-02', 'item 01-01-03',
    'item 01-02-01', 'item 01-02-02', 'item 01-02-03',
    'item 01-03-01', 'item 01-03-02', 'item 01-03-03', 

    'item 02-01-01', 'item 02-01-02', 'item 02-01-03',
    'item 02-02-01', 'item 02-02-02', 'item 02-02-03',
    'item 02-03-01', 'item 02-03-02', 'item 02-03-03',

    'item 03-01-01', 'item 03-01-02', 'item 03-01-03',
    'item 03-02-01', 'item 03-02-02', 'item 03-02-03',
    'item 03-03-01', 'item 03-03-02', 'item 03-03-03']


faulty_item_list = [
    'item 01-01-01', 
    'item 01-02-01', 'item 01-02-02', 'item 01-02-03',
    'item 01-03-01', 'item 01-03-02', 'item 01-03-03', 

    'item 02-01-01', 'item 02-01-02', 'item 02-01-03',
    'item 02-02-01', 'item 02-02-02', 'item 02-02-03',
    'item 02-03-01', 'item 02-03-02', 'item 02-03-03',

    'item 03-01-01', 'item 03-01-02', 'item 03-01-03',
                     'item 03-02-02', 'item 03-02-03',
    'item 03-03-01', 'item 03-03-02', 'item 03-03-03']

“项目列表”

并且我想删除组成一个组或子组的所有项目,以便可以返回以下项目:

['item 01-01-01', 'item 03-02-02', 'item 03-02-03']

也许最好的方法是什么?

python python-3.x
1个回答
0
投票
您可以通过列表理解来做类似的事情:

[ item for item in faulty_item_list # counts how many elements have the same start as the item, except for the last 2 chars if sum( other_item.startswith(item[:-2]) for other_item in faulty_item_list ) < 3 ]

另一种方法,对于较大的列表可能更好:

group_dict = {} for item in faulty_item_list: group_id = item[:-2] if group_id not in group_dict: group_dict[group_id] = [ 1, [item] ] else: group_dict[group_id][0] += 1 group_dict[group_id][1].append(item) [ item for group_id,(count,item_list) in group_dict.items() for item in item_list if count < 3 ]

© www.soinside.com 2019 - 2024. All rights reserved.