You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除zip生成的元组列表中XaData重复的元组?

按X值去重元组列表并适配scipy.CubicSpline

我通过zip合并三个列表生成元组列表:

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值重复的元组(比如X值为0.001625625的第二个元组),因为这些数据要传入scipy.CubicSpline函数,该函数要求X值严格递增且不能重复。

之前尝试用set()去重,但无法实现需求——set()会把整个元组作为判断重复的依据,而不是仅判断X值。之前的代码如下:

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

解决方案

可以利用字典键的唯一性,或者通过集合记录已出现的X值,实现仅按X值去重:

方法1:保留每个X值第一次出现的元组

# 初始化集合记录已出现的X值
seen_x = set()
XYUnique = []

for item in XYZip:
    x_val = item[0]
    if x_val not in seen_x:
        seen_x.add(x_val)
        XYUnique.append(item)

# 按X值排序,拆分回三个列表
XYSorted = sorted(XYUnique, key=lambda x: x[0])
XaData, Y1aData, Y2aData = zip(*XYSorted)

方法2:简洁写法(保留每个X值最后出现的元组)

如果不需要保留第一次出现的元组,可用字典推导式快速去重(重复X值会被最后出现的元组覆盖):

# 用X值作为键,元组作为值,自动去重
XYUnique_dict = {item[0]: item for item in XYZip}
XYUnique = list(XYUnique_dict.values())

# 按X值排序并拆分
XYSorted = sorted(XYUnique, key=lambda x: x[0])
XaData, Y1aData, Y2aData = zip(*XYSorted)

处理后的列表示例如下(仅保留唯一X值的元组):

[
    (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)
]

内容的提问来源于stack exchange,提问作者casandra9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:55:06