从元组的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)]
答案 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)]