Python结合重复元素

pap*_*oap 2 python sorting string list

我有一个stings列表,它有一些重复元素,我想要组合成一个较短的列表.

原始列表内容如下所示:

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']]
Run Code Online (Sandbox Code Playgroud)

通过该功能运行后,它将变为:

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']]
Run Code Online (Sandbox Code Playgroud)

列表将始终具有此一般结构,因此我基本上希望根据最后3列是否完全相同来组合列表.

我希望它是一个可调用的函数,所以它看起来像:

def combine_list(lst):
    if sublist[1:3] == next_sublist[1:3]:
        let.remove(next_sublist)
Run Code Online (Sandbox Code Playgroud)

我对此的初步研究显示了许多基于其索引删除子列表的方法,但这不一定是事先已知的.我也找到了re模块,但是我从未使用它并且不确定如何实现它.先谢谢你

Psi*_*dom 6

如果要删除最后三个元素和连续元素相同的子列表,则需要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']]
Run Code Online (Sandbox Code Playgroud)

  • 我已经用一些不同的情况对此进行了测试,例如更大的列表和包含多个子组的列表,这在所有情况下都非常有效.谢谢!!! (2认同)