从列表中删除镜像对等的最快方法

时间:2017-07-12 12:21:29

标签: python logic itertools

假设我有一个元组列表http://example.com HTTP/1.1 401 UNAUTHORIZED Please provide proper credentials. http://example.com?username=admin&password=secret ,我想删除所有反转元组的实例,例如从上面的列表中删除[(0, 1, 2, 3), (4, 5, 6, 7), (3, 2, 1, 0)]

我目前的(基本)方法是:

(3, 2, 1, 0)

随着x的增加,所用时间呈指数增长。所以,如果x很大,这需要很长时间!我怎样才能加快速度呢?

2 个答案:

答案 0 :(得分:2)

使用set时会想到:

L = set()
for ll in itertools.permutations(np.arange(x), 4):
    if ll[::-1] not in L:
        L.add(ll)

甚至,性能稍好一点:

L = set()
for ll in itertools.permutations(np.arange(x), 4):
    if ll not in L:
        L.add(ll[::-1])

答案 1 :(得分:0)

需要保留第一个看起来像是强制你使用contitional进行迭代。

a = [(0, 1, 2, 3), (4, 5, 6, 7), (3, 2, 1, 0)]
s = set(); a1 = []
for t in a:
    if t not in s:
        a1.append(t)
        s.add(t[::-1])

编辑:接受的答案解决了示例代码(即itertools置换样本)。这回答了任何列表(或可迭代)的广义问题。