我有一个Sting列表,其中有一些重复的元素,我想将它们组合成一个较短的列表。
原始列表内容如下所示:

lst = [['0.1', '0', 'RC', '100'],
        ['0.2', '10', 'RC', '100'],
        ['0.3', '5', 'HC', '20'],
        ['0.4', '5', 'HC', '20'],
        ['0.5', '5', 'HC', '20'],
        ['0.6', '5', 'HC', '20'],
        ['0.7', '5', 'HC', '20'],
        ['0.8', '5', 'HC', '20'],
        ['0.9', '10', 'RC', '100'],
        ['1.0', '0', 'RC', '100']]

在通过函数运行之后,它将变成:
lst = [['0.1', '0', 'RC', '100'],
        ['0.2', '10', 'RC', '100'],
        ['0.3', '5', 'HC', '20'],
        ['0.9', '10', 'RC', '100'],
        ['1.0', '0', 'RC', '100']]

列表将始终具有这种通用结构,因此本质上我希望根据最后3列是否完全相同来组合列表。
我希望它是一个可调用的函数,所以它看起来像:
def combine_list(lst):
    if sublist[1:3] == next_sublist[1:3]:
        let.remove(next_sublist)

我对此的初步研究表明,有很多方法可以根据子列表的索引来删除子列表,但这并不一定事先知道。我也发现了re模块,但是我从未使用过它,也不确定如何实现它。提前谢谢你

最佳答案

如果要删除与最后三个元素相同且连续的子列表,则需要在最后三个元素上键入itertools.groupby

from itertools import groupby
[next(g) for _, g in groupby(lst, key=lambda x: x[1:])]

#[['0.1', '0', 'RC', '100'],
# ['0.2', '10', 'RC', '100'],
# ['0.3', '5', 'HC', '20'],
# ['0.9', '10', 'RC', '100'],
# ['1.0', '0', 'RC', '100']]

07-24 19:01
查看更多