首页 > 解决方案 > 在 Python 中删除嵌套元组中的第二个嵌套元素

问题描述

我有一个带有坐标的元组列表:

((3.5, -0.5), (3.5, 0.5))
((3.5, 0.5), (4.5, 0.5))
((4.5, 0.5), (4.5, 1.5))
((4.5, 1.5), (5.5, 1.5))
((5.5, -0.5), (5.5, 0.5))
((5.5, 1.5), (5.5, 0.5))

有没有办法可以删除重复的第二个元素并将第一个元素连接在一起?例如在上面的例子中,以下坐标有重复:

((5.5, -0.5), (5.5, 0.5))
((5.5, 1.5), (5.5, 0.5))

我想删除 (5.5, 0.5) 并保持坐标如下:

((5.5, -0.5), (5.5, 1.5))

我尝试了以下代码,但我认为缺少某些内容,因为它在这种情况下不起作用:

removed = [t for t in (set(tuple(i) for i in coordinates))]

标签: python-3.x

解决方案


您可以dict使用keys第二个元素和list第一个元素的 s 创建 a 作为values

>>> import pprint
>>> pprint.pprint(l)  # just pretty print you initial list 
[((3.5, -0.5), (3.5, 0.5)),
 ((3.5, 0.5), (4.5, 0.5)),
 ((4.5, 0.5), (4.5, 1.5)),
 ((4.5, 1.5), (5.5, 1.5)),
 ((5.5, -0.5), (5.5, 0.5)),
 ((5.5, 1.5), (5.5, 0.5))]
>>>
>>> d = {}
>>> for a, b in l:
...     if b in d:
...          d[b].append(a)
...     else:
...          d[b] = [a]
... 

然后,您可以使用dict来产生所需的结果:

>>> result = []
>>> for k, v in d.items():
...     if len(v) == 1:
...         result.append((v[0], k))
...     else:
...         result.append(tuple(v))
... 
>>> pprint.pprint(result)
[((3.5, -0.5), (3.5, 0.5)),
 ((3.5, 0.5), (4.5, 0.5)),
 ((4.5, 0.5), (4.5, 1.5)),
 ((4.5, 1.5), (5.5, 1.5)),
 ((5.5, -0.5), (5.5, 1.5))]

推荐阅读