python-3.x - 在 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))]
解决方案
您可以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))]
推荐阅读
- r - r 脚本无任何输出
- mongodb - 如何在mgo Golang中的_id以外的字段中保存空objectId
- python - 在 Python 中从元数据中抓取数据
- c# - 通过 Visual Studio FTP 将 ASP.NET Core MVC 网站发布到 IONOS 1&1
- reactjs - 如何在反应中设置背景图像
- java - 使用 spring boot 运行 java 应用程序文件时出错
- php - Laravel 路由无法忘记密码
- vue.js - Primevue 图表模型 - 反应性数据
- typescript - 使用适当的键 TypeScript 键入字符串或对象
- reactjs - 反应。如何保存到变量中,而不是在 console.log()