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

atl*_*tis 2 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)] 
Run Code Online (Sandbox Code Playgroud)

必须减少到

[(1,2),(1,3),(2,3)]
Run Code Online (Sandbox Code Playgroud)

(虽然删除(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)]
Run Code Online (Sandbox Code Playgroud)

agf*_*agf 6

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

使用itertools.combinations来生成正确的.

>>> import itertools
>>> list(itertools.combinations((1, 2, 3), 2))
[(1, 2), (1, 3), (2, 3)]
Run Code Online (Sandbox Code Playgroud)