Python组合重复元素

2024-04-26 06:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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']]

通过函数运行后,它将变成:

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模块,但是我从未使用过它,也不确定如何实现它。提前谢谢


Tags: 函数hc元素内容列表def结构list
3条回答

也许只是用一个集合来跟踪重复的?你知道吗

def combine_list(lst):
    out = []
    seen = set()
    for item in lst:
        if not tuple(item[1:]) in seen:
            out.append(item)
            seen.add(tuple(item[1:]))
    return out

列表是一种可变的数据结构。所以不能保证列表的内容不会随时间而改变。这意味着它不能用于哈希函数(set使用的)。另一方面,元组是不可变的,因此是可散列的。你知道吗

for index in range(len(lst) - 1, 0, -1):
    if lst[index][1:] == lst[index - 1][1:]:
        lst.pop(index)

通过向后浏览列表,我们消除了移除元素时索引发生变化的问题。这将导致就地减少。你知道吗

如果你想做一个新的列表,这可以通过列表理解来完成,遵循同样的想法,但是因为我们没有做到位,所以我们不必反向工作:

lst[0] + [lst[ind] for ind in range(1, len(lst)) if lst[ind][1:] != lst[ind-1][1:]]

同样,lst[0]是不重复的,因此自动包含。你知道吗

如果要删除后三个元素相同且连续的子列表,则需要在后三个元素上键入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']]

相关问题 更多 >