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

Python使用while循环计算列表元素到值变化所需步数的方法

实现方案

你要的功能可以通过while循环非常简洁地实现,不需要嵌套多层if,同时支持任意长度的连续相同元素计算,还自带边界校验避免索引越界。

你给出的示例列表如下:

list1 = [81,79,74,57,47,39,39,39,31,31,31,31,31,30,27,22,20]

通用列表版本实现

list1 = [81,79,74,57,47,39,39,39,31,31,31,31,31,30,27,22,20]
gap = []
n = len(list1)
for i in range(n):
    diff = 1
    # 未越界且后续元素和当前元素相等时,步数累加
    while i + diff < n and list1[i] == list1[i + diff]:
        diff += 1
    gap.append(diff)

运行后得到的gap列表完全符合你的要求:前5个互不相同的元素对应值均为1,三个连续39对应输出3、2、1,五个连续31对应输出5、4、3、2、1。

适配Pandas DataFrame版本实现

对应你原有操作df的场景,修改后代码如下:

gap = []
n = len(df)
for i in range(n):
    diff = 1
    while i + diff < n and df.iloc[i]['prev_count'] == df.iloc[i + diff]['prev_count']:
        diff += 1
    gap.append(diff)

如果需要处理大数据量追求更高性能,可以提前遍历一次列表记录所有值变化的索引位置,再批量计算每个位置的步数,上述实现对于常规场景已经足够清晰易用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:03