【发布时间】:2017-05-23 18:05:58
【问题描述】:
我有一个名为 lt 的元组列表。
lt = [ (1,2) , (1,2) , (2,3) , (3,4) , (5,6) , (7,8) , (7,8) ]
我想从列表中删除所有连续的重复元组。结果应该是这样的。
mainList = [(1, 2), (2, 3), (3, 4), (5, 6), (7, 8)]
【问题讨论】:
标签: python list python-3.x tuples
我有一个名为 lt 的元组列表。
lt = [ (1,2) , (1,2) , (2,3) , (3,4) , (5,6) , (7,8) , (7,8) ]
我想从列表中删除所有连续的重复元组。结果应该是这样的。
mainList = [(1, 2), (2, 3), (3, 4), (5, 6), (7, 8)]
【问题讨论】:
标签: python list python-3.x tuples
使用pairwise() function from the itertools reception section:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
mainList = [curr for curr, next in pairwise(lt) if curr != next]
这将为您提供一个新列表,其中删除了所有连续的元组。您还可以将itertools.groupby() function 与默认身份密钥一起使用:
from itertools import groupby
mainList = [k for k, g in groupby(lt)]
演示:
>>> from itertools import tee, groupby
>>> lt = [ (1,2) , (1,2) , (2,3) , (3,4) , (5,6) , (7,8) , (7,8) ]
>>> def pairwise(iterable):
... "s -> (s0,s1), (s1,s2), (s2, s3), ..."
... a, b = tee(iterable)
... next(b, None)
... return zip(a, b)
...
>>> [curr for curr, next in pairwise(lt) if curr != next]
[(1, 2), (2, 3), (3, 4), (5, 6)]
>>> [k for k, g in groupby(lt)]
[(1, 2), (2, 3), (3, 4), (5, 6), (7, 8)]
【讨论】:
lt = [ (1,2) , (1,2) , (2,3) , (3,4) , (5,6) , (7,8) , (7,8) ]
mainList = []
for t in lt:
if len(mainList) == 0:
mainList.append(t)
else:
if mainList[-1] != t:
mainList.append(t)
print(mainList)
结果
[(1, 2), (2, 3), (3, 4), (5, 6), (7, 8)]
【讨论】:
复杂的列表理解怎么样?
[v for i, v in enumerate(lt) if i == o or v != lt[i-1]]
【讨论】:
您可以尝试创建一个新列表,并将元素添加到该列表中。如果一个元素已经在新列表中,不要添加它。
lt = [ (1,2) , (1,2) , (2,3) , (3,4) , (5,6) , (7,8) , (7,8) ]
newlt = [lt[0]]
for item in range(len(lt)):
if item == 0:
continue
elif lt[item] == lt[item - 1]:
continue
else:
newlt.append(lt[item])
print(newlt)
[(1, 2), (2, 3), (3, 4), (5, 6), (7, 8)]
编辑:新的解决方案,这应该工作。这显然是非常基本的。
【讨论】: