我有一个包含等长序列的List(在此示例中,序列的长度为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
,该算法的运行速度非常差。
有没有一种简单的方法可以将这样的条件应用于具有更好时间复杂度的列表?
答案 0 :(得分:4)
[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)}
编辑:这将适用于任何长度的case元素。