所以我有两个项目清单:
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']
也许最好的方法是什么?
[ 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 ]