从 zip 创建的元组列表中删除浮点重复项

问题描述 投票:0回答:2

我通过将三个列表压缩在一起来创建一个元组列表,数据对: XYZip = list(zip(XaData, Y1aData, Y2aData))

[(0.001625625, 4.782947316198166, -0.011032947316198166), (-2.5e-06, 4.783447358402665, 0.020216552641597337), (0.0008137499999999999, 4.782997384780477, -0.017282997384780476), (0.00081, 4.783247405882726, 0.020216752594117274), (0.001625625, 4.782066023993667, -0.011032066023993668), ( 0.00324625, 4.780809700135795, 0.03271919029986421), ..., (19.4121325, 4.653511649011105, 1.1703464883509889)]

我需要去掉 XaData 值重复的元组,比如这个 0.001625625。整个元组 (0.001625625, 4.782066023993667, -0.011032066023993668) 需要去。顺序无关紧要。我可以在第二步进行排序。我试过 set() 无济于事。

数据将被馈送到 scipy.CubicSpline 函数,其中 x 需要严格增加并且不会接受重复项!

我试过了……

XYZip = list(zip(XaData, Y1aData, Y2aData))
XYUnique = set(XYZip)
XYSorted = sorted(XYUnique)
XaData, Y1aData, Y2aData = zip(*XYSorted)

...显然不删除具有重复 XaData 值的元组。

这是我第一步需要的:

[(0.001625625, 4.782947316198166, -0.011032947316198166), (-2.5e-06, 4.783447358402665, 0.020216552641597337), (0.0008137499999999999, 4.782997384780477, -0.017282997384780476), (0.00081, 4.783247405882726, 0.020216752594117274), (0.00324625, 4.780809700135795, 0.03271919029986421), .. ., (19.4121325, 4.653511649011105, 1.1703464883509889)]

python-3.x list set tuples drop-duplicates
2个回答
0
投票

set()
将删除所有重复项。剩下的值很可能真的很接近。


0
投票

如果你改用 pandas 就简单明了。

例子:

x = 1,1,2,3,4,5
y = 1,2,3,4,5,6
z = 1,3,5,7,9,11

pd.DataFrame(zip(x, y, z), columns=["x","y","z"]).drop_duplicates(subset='x', keep="last")

第一步 创建数据框

df = pd.DataFrame(zip(x, y, z), columns=["x","y","z"])
x y z
0 1 1 1
1 1 2 3
2 2 3 5
3 3 4 7
4 4 5 9
5 5 6 11

第二步 删除重复项参考

df = df.drop_duplicates(subset='x', keep="last")
x y z
1 1 2 3
2 2 3 5
3 3 4 7
4 4 5 9
5 5 6 11

下降 1, 1, 1 因为

keep="last"

temp = {i_x: (i_y, i_z) for i_x, i_y, i_z in zip(x, y, z)}
[((i,)+temp[i]) for i in temp]

第一步 将 x y z 转换为字典(键 x 因为我需要删除 x 上的重复项)

temp = {i_x: (i_y, i_z) for i_x, i_y, i_z in zip(x, y, z)}

第二步 转换为元组列表

[((i,)+temp[i]) for i in temp]

结果

[(1, 2, 3), (2, 3, 5), (3, 4, 7), (4, 5, 9), (5, 6, 11)]

# drop (1,1,1) because (1, 1, 1) and (1, 2, 3) are same in first element.

为什么在这种情况下元组集没有返回正确答案

(0.001625625, 4.782947316198166, -0.011032947316198166)
            ,      |           ,          |
        same,      not same    ,          not same
            ,      |           ,          | 
(0.001625625, 4.782066023993667, -0.011032066023993668)

# so

(0.001625625, 4.782947316198166, -0.011032947316198166) 
# not equal 
(0.001625625, 4.782066023993667, -0.011032066023993668)

结合您的代码

XYZip = list(zip(XaData, Y1aData, Y2aData))

df = pd.DataFrame(zip(XaData, Y1aData, Y2aData), columns=["XaData","Y1aData","Y2aData"])
df = df.drop_duplicates(subset='XaData', keep="last")

# if you want to convert to list of tuple 

result = [tuple(i) for i in df.values]

© www.soinside.com 2019 - 2024. All rights reserved.