在列表中,我需要删除在列表中彼此遵循的重复就像下面这个例子:
[("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)]