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

基于子范围最大值自动选子列表:Python新手调整产品周常规价格

嘿,作为刚接触Python的新手,处理这种每周价格调整的需求确实需要一点小技巧,我来一步步帮你搞定!

解决思路:基于子范围最大值自动划分价格区间

你的需求核心是把52周的价格数据分割成连续的子范围(也就是连续几周的价格段),然后用每个子范围的最大值来作为调整的依据,这样就能批量处理价格调整,不用手动逐周设置。

第一步:准备好你的数据

首先把你的完整价格数据补全,我们先基于你给出的部分数据整理出完整示例(你可以直接替换成自己的真实数据):

# 1到52周的列表
Weeks = list(range(1, 53))
# 完整的当前常规价格列表(替换成你自己的真实数据)
RegPriceNow = [5.99, 4.99, 4.99, 5.99, 5.99, 5.99, 5.99, 5.99, 4.99, 4.99, 
               6.49, 6.49, 6.49, 6.49, 6.49, 6.49, 6.49, 6.49, 6.49, 6.49, 
               5.49, 5.49, 6.49, 5.49, 6.49, 6.49, 6.49, 6.49, 5.49, 5.49, 
               5.99, 6.49, 5.99, 6.49, 5.99, 5.99, 6.49, 5.99, 5.99, 5.49, 
               5.99, 5.99, 6.49, 6.49, 5.99, 5.99, 5.49, 5.49, 5.99, 5.99, 
               6.49, 6.49]

第二步:实现自动划分区间的函数

我写了一个可自定义的函数,能根据价格波动自动划分子范围,核心逻辑是:当价格降到当前区间最大值的某个比例以下时,就分割出一个新的区间(你可以自由调整这个比例或者更换分割规则):

def get_max_based_ranges(weeks, prices, threshold_ratio=0.9):
    # 先检查输入数据是否合法
    if not weeks or not prices or len(weeks) != len(prices):
        return []
    
    ranges = []
    # 初始化第一个区间的起始周、最大值和价格列表
    start_week = weeks[0]
    current_max = prices[0]
    current_prices = [prices[0]]
    
    # 从第二周开始遍历
    for i in range(1, len(prices)):
        current_price = prices[i]
        # 更新当前区间的最大值
        if current_price > current_max:
            current_max = current_price
        current_prices.append(current_price)
        
        # 当价格低于当前最大值的threshold_ratio时,分割区间
        if current_price < current_max * threshold_ratio:
            # 把当前区间存入结果
            ranges.append({
                "start_week": start_week,
                "end_week": weeks[i-1],
                "max_price": current_max,
                "original_prices": current_prices.copy()
            })
            # 初始化新的区间
            start_week = weeks[i]
            current_max = current_price
            current_prices = [current_price]
    
    # 处理最后一个区间
    ranges.append({
        "start_week": start_week,
        "end_week": weeks[-1],
        "max_price": current_max,
        "original_prices": current_prices.copy()
    })
    
    return ranges

调用这个函数,就能得到所有自动划分的子范围:

# 获取划分好的区间
price_ranges = get_max_based_ranges(Weeks, RegPriceNow)

# 打印每个区间的信息,方便查看
for idx, rng in enumerate(price_ranges, 1):
    print(f"区间 {idx}: 第{rng['start_week']}周 - 第{rng['end_week']}周,最大值: {rng['max_price']}")
    print(f"原始价格: {rng['original_prices']}\n")

第三步:生成调整后的目标价格列表

如果你想直接把每个子范围的最大值作为调整后的目标价格,可以用下面的代码生成完整的目标价格列表:

target_prices = []
for rng in price_ranges:
    # 给当前区间的所有周设置为该区间的最大值
    target_prices.extend([rng['max_price']] * len(rng['original_prices']))

# 打印调整后的价格列表,和Weeks一一对应
print("调整后的目标价格列表:")
print(target_prices)

调整逻辑的自定义

如果你不需要用阈值来分割区间,比如只想把连续相同价格的周划分为一个子范围,只需要修改函数里的分割条件:
把if current_price < current_max * threshold_ratio:改成if current_price != current_max:就行,这样相同价格的连续周会被自动归为一个区间,最大值就是该价格本身。

如果你有其他分割规则(比如按固定周数划分、按价格涨跌幅度划分),也可以修改这个判断条件,新手可以先从简单的规则开始测试,慢慢调整到符合自己需求的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:35:41