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

Python条件赋值与EURUSD D1数据高低极值混合排序问题

问题1:Python条件赋值实现

针对你需要的条件赋值逻辑,这里有几种直观好用的实现方式,看你偏好哪种:

  • 嵌套三元表达式:适合简单条件场景,一行就能搞定

    X = Y if a == b else Z if b == c else None  # 可根据需求设置其他默认值,比如0或者空字符串
    

    注意:如果两个条件同时满足(比如a==b且b==c),会优先取第一个条件的结果Y。

  • if-else语句:逻辑更清晰,适合后续可能扩展条件的情况

    if a == b:
        X = Y
    elif b == c:
        X = Z
    else:
        X = None  # 处理两个条件都不满足的情况
    
  • 字典映射(进阶):如果后续要加更多条件,这种方式更易维护

    condition_map = {
        (a == b): Y,
        (b == c): Z
    }
    X = condition_map.get(True, None)  # 找到第一个为True的条件对应值,默认返回None
    

    小提示:字典的键是布尔值,如果多个条件同时为True,只会取最后一个键为True的值,所以更适合互斥的条件场景。


问题2:生成按索引排序的peaks数组

你的需求是把高低极值点按索引排序后,对应取high或low的数值,这里有两种高效的实现方法:

方法1:列表推导式(直观易懂)

遍历排序后的idx,逐个判断当前索引属于max_idx还是min_idx,再取对应的值:

import numpy as np

# 先把列表转成集合,提升查找速度(数据量大时更明显)
max_set = set(max_idx)
min_set = set(min_idx)

peaks = np.array([hi.values[i] if i in max_set else lo.values[i] for i in idx])

方法2:Numpy向量化操作(高效)

利用Numpy的布尔索引批量处理,完全避免循环,大数据量下速度更快:

import numpy as np

# 创建和idx长度匹配的空数组
peaks = np.zeros(len(idx))
# 找出idx中属于max_idx的位置
max_mask = np.isin(idx, max_idx)
# 对应位置赋值hi的数值
peaks[max_mask] = hi.values[idx[max_mask]]
# 剩余位置赋值lo的数值
peaks[~max_mask] = lo.values[idx[~max_mask]]

验证示例(用你给出的测试数据)

max_idx = [4, 31, 72, 97]
min_idx = [18, 43, 67]
idx = [4, 18, 31, 43, 67, 72, 97]
high_peaks = np.array([1.10947, 1.14955, 1.10167, 1.13829])
low_peaks = np.array([1.07772, 1.0635 , 1.07263])

# 模拟hi和lo的values数组
hi_values = np.zeros(100)
lo_values = np.zeros(100)
for i, val in zip(max_idx, high_peaks):
    hi_values[i] = val
for i, val in zip(min_idx, low_peaks):
    lo_values[i] = val

# 用方法2生成peaks
max_mask = np.isin(idx, max_idx)
peaks = np.zeros(len(idx))
peaks[max_mask] = hi_values[idx[max_mask]]
peaks[~max_mask] = lo_values[idx[~max_mask]]

print(peaks)
# 输出:[1.10947 1.07772 1.14955 1.0635  1.07263 1.10167 1.13829]

完全符合你期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:32:44