Python统计列表大于前项数字次数,用户输入版本结果错误原因求解
问题原因
- 统计逻辑的
for循环被放在了输入的while循环内部,每新增一个元素就会全量遍历一次列表统计,导致计数被重复累加。比如新增第3个元素时,会把前2个元素的比较结果再算一遍,最终计数远大于真实值。 for循环的遍历起始下标错误,你写的是range(0, len(lst)),当i=0时i-1 = -1,会取列表的最后一个元素做比较,出现无意义的逻辑错误。- 列表长度为1时也会执行统计逻辑,此时没有前一个元素可以比较,属于无效统计。
修正方案
方案1:输入完成后统一统计(和最初的正确逻辑一致)
把统计逻辑移到while循环外面,等用户输入完所有元素再统计:
lst = [] count = 0 finished = False while not finished: n = int(input()) if n != 0: lst.append(n) else: finished = True # 输入完成后再统计 for i in range(1, len(lst)): if lst[i] > lst[i-1]: count += 1 print(count)
方案2:输入时实时统计(效率更高,不需要二次遍历)
每次新增元素时,仅比较当前新元素和前一个元素,不需要全量遍历列表:
lst = [] count = 0 finished = False while not finished: n = int(input()) if n != 0: # 列表已有元素时才做比较 if len(lst) > 0: if n > lst[-1]: count +=1 lst.append(n) else: finished = True print(count)
内容的提问来源于stack exchange,提问作者ka4c
相关产品推荐
相关产品推荐

