【问题标题】:Delete repeated subsequent entries from 2D list从二维列表中删除重复的后续条目
【发布时间】:2021-07-07 18:17:07
【问题描述】:

我有以下清单:

p =\
 [(58.5, -4.5),
 (67.5, -4.5),
 (76.5, -4.5),
 (76.5, 4.5),
 (67.5, 4.5),
 (58.5, 4.5),
 (67.5, 4.5),
 (58.5, 4.5),
 (58.5, 13.5),
 (49.5, 13.5),
 (40.5, 13.5),
 (49.5, 13.5),
 (40.5, 13.5),
 (40.5, 22.5),
 (31.5, 22.5),
 (22.5, 22.5),
 (31.5, 22.5),
 (22.5, 22.5),
 (22.5, 31.5),
 (13.5, 31.5),
 (4.5, 31.5),
 (13.5, 31.5),
 (4.5, 31.5),
 (4.5, 40.5),
 (-4.5, 40.5),
 (-4.5, 31.5),
 (-4.5, 22.5),
 (-4.5, 31.5),
 (-4.5, 22.5),
 (-4.5, 13.5),
 (-4.5, 22.5),
 (-4.5, 13.5),
 (-4.5, 4.5),
 (-4.5, 13.5),
 (-4.5, 4.5),
 (-4.5, -4.5),
 (4.5, -4.5),
 (13.5, -4.5),
 (4.5, -4.5),
 (13.5, -4.5),
 (22.5, -4.5),
 (13.5, -4.5),
 (22.5, -4.5),
 (31.5, -4.5),
 (22.5, -4.5),
 (31.5, -4.5),
 (40.5, -4.5),
 (31.5, -4.5),
 (40.5, -4.5),
 (49.5, -4.5),
 (40.5, -4.5),
 (49.5, -4.5),
 (58.5, -4.5),
 (49.5, -4.5),
 (58.5, -4.5)]

如您所见,有一些重复的坐标:

我只保留一个坐标的第一次出现并删除同一坐标的所有后续重复:

在 Python 中有什么聪明的方法可以做到这一点吗?

【问题讨论】:

标签: python list numpy


【解决方案1】:

最简单的方法: list(set(p))

编辑:要保留订单,请执行以下操作: [c for i, c in enumerate(p) if c not in p[:i]]

【讨论】:

    【解决方案2】:

    您可以使用set 过滤重复项(p 是您的问题列表):

    seen = set()
    out = []
    for coord in p:
        if coord not in seen:
            out.append(coord)
            seen.add(coord)
    
    from pprint import pprint
    
    pprint(out)
    

    打印:

    [(58.5, -4.5),
     (67.5, -4.5),
     (76.5, -4.5),
     (76.5, 4.5),
     (67.5, 4.5),
     (58.5, 4.5),
     (58.5, 13.5),
     (49.5, 13.5),
     (40.5, 13.5),
     (40.5, 22.5),
     (31.5, 22.5),
     (22.5, 22.5),
     (22.5, 31.5),
     (13.5, 31.5),
     (4.5, 31.5),
     (4.5, 40.5),
     (-4.5, 40.5),
     (-4.5, 31.5),
     (-4.5, 22.5),
     (-4.5, 13.5),
     (-4.5, 4.5),
     (-4.5, -4.5),
     (4.5, -4.5),
     (13.5, -4.5),
     (22.5, -4.5),
     (31.5, -4.5),
     (40.5, -4.5),
     (49.5, -4.5)]
    

    【讨论】:

    • 很好的答案!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多