python - 按条件删除重复的元组对

标签 python numpy

如何根据 if (Y, Z) 的条件从列表中删除重复的元组和(Z, Y)是列表的一部分,那么我们只保留 Y < Z 的匹配项?

例如,如果我们从以下汽车 ID 对列表开始:

CarID1 = [(100, 500), (100, 600), (100, 700), (500, 100), (500, 200)], 

那么我们应该删除 (500, 100条目并结束:

CarID2 = [(100, 500), (100, 600), (100, 700), (500, 200)]  

我尝试使用以下代码来获取唯一的元组,但它没有执行我所描述的操作。

y = np.unique(x, axis=0)
z = [] 
for i in y:
   z.append(tuple(i))

最佳答案

使用字典,您可以在线性时间内完成它。
请注意,对于每个元组 (u,v)我首先检查是否 (v,u)已经存在,在这种情况下,我保留 u < v 的那个,否则插入字典中。

CarID1 = [(100, 500), (100, 600), (100, 700), (500, 100), (500, 200)]

d ={}
for (u, v) in CarID1:
    if (v, u) in d:
        d[(v,u)] = (u,v) if u < v else (v,u)
    else:
        d[(u,v)]  = (u,v)

d.values()
#dict_values([(100, 500), (100, 600), (100, 700), (500, 200)])

关于python - 按条件删除重复的元组对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52048331/

相关文章:

python - 使用 pd.read_clipboard 读取打印精美/格式化的数据框?

python - 如何使用 Python Requests 模块模拟 HTTP 发布请求?

Python - 在数据行之间进行插值

python - 循环错误的 Numpy 排序数组,但原始工作正常

python - 向量化 np.arange 或等价物

python - 如何将连续数据拆分成组?

python - 如何使列表索引可互换,如 ['a' 、 'b' 、 'c' ] == ['b' 、 'a' 、 'c' ]?

python - 跳出两个循环

python - Django 从其他博客导入帖子

python - 在 Pydub 和 Librosa 之间转换音频文件