有效地从lis中删除重复项和类似元素

2024-09-26 22:12:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含等长数字序列的列表(在本例中,序列的长度是2,但在其他情况下它可能比序列长),例如:

[[3, 2], [0, 6], [6, 0], [7, 7], [0, 5], [7, 7]]

现在我想删除所有重复项([7, 7]出现两次),但也要删除所有反向重复项([0, 6][6, 0])。你知道吗

我现在的代码是:

def getUniqueShapes(shapes):
    unique = []
    for shape in shapes:
        if shape not in unique and reversed(shape) not in unique:
            shapes.append(shape)

    print(unique)

我对这个例子的预期输出是

[[3, 2], [0, 6], [7, 7], [0, 5]]

由于not in,这个算法运行速度很慢。 有没有一种简单的方法可以将这样的条件应用到时间复杂度更好的列表中?你知道吗


Tags: 代码in列表forifdefnot情况
1条回答
网友
1楼 · 发布于 2024-09-26 22:12:45
  • 假设在[1, 0]的情况下,[0, 1]两者的意思相同。你知道吗
  • 您需要首先将列表转换为元组,因为list是不可散列的。你知道吗
  • 另外,输出是一组元组,您可以轻松地将其转换为列表列表。你知道吗
>>> l = [[1, 2], [2, 1], [3, 4], [5, 6], [5, 6]]
>>> set(map(tuple, map(sorted, l)))
{(1, 2), (3, 4), (5, 6)}

编辑:这将适用于任何长度的元素。你知道吗

相关问题 更多 >

    热门问题