如果(b,a)存在,则从元组的python列表中删除(a,b)

时间:2012-03-30 01:02:11

标签: python list

从元组的python列表(它本身就是列表的笛卡尔积)我想删除(a,b)if(b,a)是否在列表中。只有(a,b)之一或(b,a)必须保留。列表

[(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)] 

必须减少到

[(1,2),(1,3),(2,3)]

(虽然删除(1,2)并保留(2,1)很好)

我试过这样做,但我不确定在迭代时从列表中删除。这不起作用。 (给我[(1, 2), (2, 1), (2, 3), (3, 1), (3, 3)]

[pairs.remove((a,b)) for (a,b) in pairs if ((b,a) in pairs)]

3 个答案:

答案 0 :(得分:6)

为什么要从列表中删除不正确的?

使用itertools.combinations代替生成正确的。

>>> import itertools
>>> list(itertools.combinations((1, 2, 3), 2))
[(1, 2), (1, 3), (2, 3)]

答案 1 :(得分:4)

>>> [el for el in pairs if el[0] < el[1]]
[(1,2),(1,3),(2,3)]

答案 2 :(得分:1)

pairs = [(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)] 
new_pairs = []

for a, b in pairs:
    if (a, b) in new_pairs or (b, a) in new_pairs:
        pass
    else:
        new_pairs +=  [(a,b)]

new_pairs = [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]