gpt4 book ai didi

python - 删除列表中重复项之间的所有实例,Python

转载 作者:行者123 更新时间:2023-11-28 17:36:26 25 4
gpt4 key购买 nike

我需要编写一个函数,它接受一个列表,并从该列表中删除两个相同项目之间的所有项目(并保留相同项目之一)。

例如。

list1 = ['a', 'b', 1, 'c', 'd', 'e', 'f', 'g', 'h', 1, 'i', 'j']
list2 = ['a', 'b', 1, 'c', '2', 'd', '2', 'e', 'f', 1, 'g', 'h']
list3 = ['a', 1, 'b', 'c', 1, 'd', 2, 'e', 'f', 2, 'g']

print(funct(list1))
print(funct(list2))
print(funct(list3))

将导致:

['a', 'b', 1, 'i', 'j']
['a', 'b', 1, 'g', 'h']
['a', 1, 'd', 2, 'g']

您可以假设列表中重复 block 的任何第二个实例总是完全独立的,或者完全在另一个 block 中。

例如。

['a', 1, 'b', 2, 'c', 2, 'd', 1, 'e']

['a', 1, 'b', 1, 'c', 2, 'd', 2, 'e']

但从来没有

['a', 1, 'b', 2, 'c', 1, 'd', 2, 'e']

我已经编写了代码来执行此操作,但不喜欢创建单独的列表并将项目附加到该列表的需要,而宁愿只是从原始列表中删除项目。

这就是我所拥有的,任何帮助将不胜感激:)

def funct(list):

unlooped = []
appending = True
list_index = 1

for item in list:

if appending:
unlooped.append(item)

elif item == looper:
appending = True

if item in list[list_index:] and appending:
appending = False
looper = item

list_index += 1

return unlooped

最佳答案

这个怎么样:

def unloop(ls):
return [x for i,x in enumerate(ls) if not set(ls[:i]).intersection(set(ls[i:]))]

解释:如果 [0..i-1] 项的交集,则从 ls 的位置 i 处获取项 x [i..n] 为空,即 x 前后均未出现任何元素。

它适用于您提供的 3 个示例,可能需要针对边缘情况对其进行测试

关于python - 删除列表中重复项之间的所有实例,Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043755/

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