我有一个类似[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在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;


问候,

关于python - 在Python序列中删除相邻的多个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11067892/

10-16 13:23