Skip to main content
 首页 » 编程设计

python之在 Python 序列中删除相邻的多个元素

2025年05月04日14lexus

我有一个像 [0, 1, 0, 1, 0, 1, 0] 这样的序列,我需要一个函数来删除重复的相邻序列对,保留第一个,然后返回 [0, 1, 0]。这些是我期望的一些结果。

>>> remove_repeated_pairs([0, 1]) 
[0, 1] 
>>> remove_repeated_pairs([0, 1, 0]) 
[0, 1, 0] 
>>> remove_repeated_pairs([0, 1, 0, 1]) 
[0, 1] 
>>> remove_repeated_pairs([0, 1, 0, 1, 0]) 
[0, 1, 0] 
>>> remove_repeated_pairs([2, 0, 1, 0, 1, 0]) 
[2, 0, 1, 0] 
>>> remove_repeated_pairs([1, 2, 0, 1, 0, 1, 0]) 
[1, 2, 0, 1, 0] 

第一版:

我试过这段代码:

def remove_repeated_pairs(seq): 
    result = [] 
    for i in range(0, len(seq), 2): 
        if len(result) >= 2: 
            last_seq = result[-2:] 
        else: 
            last_seq = None 
        pair = seq[i:i + 2] 
        if pair != last_seq: 
            result.extend(pair) 
    return result 

但它不适用于此:

>>> remove_repeated_pairs([1, 3, 0, 2, 1, 2, 1, 3, 0]) 
[1, 3, 0, 2, 1, 2, 1, 3, 0] 

正确答案应该是[1, 3, 0, 2, 1, 3, 0]

请您参考如下方法:

我认为问题出在这样一个事实,即您 2 乘 2 遍历列表中的元素(对于 i in range(0, len(seq), 2))。 因此,如果重复对从一个奇怪的地方开始,您将不会检测到它 - 正如您给出的最后一个示例。

我会尝试这样的事情:

def remove_repeated_pairs(l): 
    i = 2; 
    while i < len(l)-1: 
            if l[i] == l[i-2] and l[i+1]==l[i-1]: 
                l.pop(i); 
                l.pop(i); 
            else: 
                i+=1; 
 
    return l; 

问候,