【发布时间】:2018-02-02 20:18:36
【问题描述】:
在元组列表中,我只想拥有一个元组的一个副本,它可能是 (x, y) 或 (y, x)。
所以,在:
# pairs = list(itertools.product(range(3), range(3)))
pairs = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
结果应该是:
result = [(0, 0), (0, 1), (0, 2), (1, 1), (1, 2), (2, 2)] # updated pairs
这个元组列表是使用itertools.product() 生成的,但我想删除重复项。
我的工作解决方案:
pairs = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
result = []
for pair in pairs:
a, b = pair
# reordering in increasing order
temp = (a, b) if a < b else (b, a)
result.append(temp)
print(list(set(result))) # I could use sorted() but the order doesn't matter
如何改进?
【问题讨论】:
-
您的解决方案有什么问题?您希望改进代码的哪些方面?
-
@ChrisMartin 速度改进 > 就地删除 > 简洁代码
-
@AjitZero,这些看起来像坐标。那是他们起源的地方吗?我问的原因是稀疏矩阵擅长存储和操作此类数据。我在下面提供了一个利用这一点的解决方案。
-
@jp_data_analysis 就我而言,没有。不过感谢您分享!
标签: python list tuples itertools