gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:28 25 4
gpt4 key购买 nike

我有一个像 [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;

问候,

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com