如何删除列表中相互跟随的重复项



在列表中,我需要删除在列表中彼此遵循的重复就像下面这个例子:

[("0", "1"), ("1", "2"), ("0", "2"), ("2", "0")]

和我想要的输出:

["0", "1", "2", "0", "2", "0"]

我什么都没尝试,因为我不知道该怎么做,也许迭代列表并使用if index[0] == index[1]

使用一个简单的嵌套循环跟踪前一个元素:

l = [('0', '1'), ('1', '2'), ('0', '2'), ('2', '0')]
out = []
prev = None
for t in l:
for x in t:
if x != prev:
out.append(x)
prev = x
print(out)

输出:['0', '1', '2', '0', '2', '0']

如果你真的想要一个只有一个元组的列表:

out = [tuple(out)]

输出:[('0', '1', '2', '0', '2', '0')]

您需要首先将列表扁平化(我使用chain(*lst)这样做),然后您可以使用groupby以便跳过连续的重复项:

from itertools import chain, groupby
lst = [('0', '1'), ('1', '2'), ('0', '2'), ('2', '0')]
ret = [item for item, _ in groupby(chain(*lst))]
print(ret) # ['0', '1', '2', '0', '2', '0']

您可以通过几个连续的步骤(实际上可以合并)来完成此操作:

tuplist = [('0', '1'), ('1', '2'), ('0', '2'), ('2', '0')]
# unpacking tuples
list2 = []
for t in tuplist:
list2.extend(t) #shorter way of doing list2 += [t[0], t[1]]

# removing duplicates
list3 = [list2[0]]
for i in list2[1:]:
if i != list3[-1]:
list3.append(i)

# converting list3 to the desired format
list4 = [tuple(list3)]

最新更新