Python列表元素比较:统计小于前序元素的次数
列表相邻元素降序次数统计的实现方案
需求明确
- 初始计数
count为0 - 待处理列表:
[120, 134, 155, 145, 160, 190, 200, 185] - 统计规则:当元素小于其前一个元素时,
count加1 - 预期结果:
count = 2(对应145<155、185<200这两个情况)
关于你提出的嵌套循环思路
你想的嵌套循环for this in mylist: for that in mylist:完全没必要,这种方式会遍历所有元素对,做大量无效对比,既降低效率又增加逻辑复杂度——我们只需要逐个对比相邻的两个元素就够了。
两种高效实现方法
方法1:基础索引遍历
从列表的第二个元素开始,逐个和前一个元素对比:
mylist = [120, 134, 155, 145, 160, 190, 200, 185] count = 0 # 从索引1开始,因为要和前一个索引(i-1)的元素对比 for i in range(1, len(mylist)): if mylist[i] < mylist[i-1]: count += 1 print(count) # 输出:2
方法2:用zip函数简化代码
利用zip将原列表和它的切片(从第二个元素开始)配对,生成相邻元素对,再统计符合条件的数量:
mylist = [120, 134, 155, 145, 160, 190, 200, 185] # zip(mylist[:-1], mylist[1:]) 会生成(120,134), (134,155), ..., (200,185)这样的元素对 count = sum(1 for prev, curr in zip(mylist[:-1], mylist[1:]) if curr < prev) print(count) # 输出:2
这两种方法的时间复杂度都是O(n),比嵌套循环的O(n²)高效很多,逻辑也更清晰。
内容的提问来源于stack exchange,提问作者Federico Gottardi
相关产品推荐
相关产品推荐

