输入采用元组列表的形式,
left_corners = [((380, 456), 1), ((1129, 456), 2), ((354, 328), 3), ((1137, 325), 4)]
right_corners = [((784, 456), 1), ((1535, 456), 2), ((778, 328), 3)]
公共(public)元素是元组的第二个元素为 1, 2, 3
的元素,所以我希望最终的表示看起来像 -
[(((380, 456), 1),((784, 456), 1)), (((1129, 456), 2),((1535, 456), 2)), (((354, 328), 3), ((778, 328), 3))]
我想不出没有几个循环的解决方案(循环遍历两个元素并附加在公共(public)列表中具有相同第二个元素的元素)。有没有更Pythonic的方式?我也对 numpy 或其他东西中的其他表示形式持开放态度。
假设:
我们可以假设两个列表都以列表的第二个元素为键进行排序,但是 left_corners
或 right_corners
可能比另一个拥有更多的元素
最佳答案
如果你使用字典,你可以做一些更有效的事情
group_lists = {}
for corner in (left_corners+right_corners):
group_lists[corner[1]] = group_lists.get(corner[1], [])
group_lists[corner[1]].append(corner)
output = [group_lists[k] for k in group_lists]
如果您希望输出是元组列表而不是列表列表,您只需将最后一行更改为
output = [tuple(group_lists[k]) for k in group_lists]
关于python - 根据某些标准查找列表的共同元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62417023/