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
相关产品推荐
相关产品推荐

