python - 根据某些标准查找列表的共同元素?

标签 python python-3.x list

输入采用元组列表的形式,

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_cornersright_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/

相关文章:

c# - 如何按对象中的属性对 List<T> 进行排序

python - 用 C 和 Python 实现汇编程序

python - 使用 Dropwhile 从嵌套循环快进 xrange?

python - 如何结合使用github和ec2来部署python应用

python - "RuntimeError: generator raised StopIteration"每次我尝试运行应用程序时

python - python 中的数学 - 将数据文件转换为矩阵

python - Python 中 if 语句中 or、and 和 not 的问题

python - partial 和 partialmethod 有什么区别?

python - Python 中 if 语句流的逻辑

python - 如何将字符串列表打印为没有中间字符的单个字符串