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

Python如何统计列表中小于每个元素的元素个数

代码错误原因

你的代码存在两处核心逻辑问题,导致结果不符合预期:

  • count变量作用域错误:你将计数变量count定义在所有循环的外层,每次统计完一个元素的计数后没有重置,数值会持续累加,最终结果自然越来越大。
  • 循环和判断逻辑错误:
    1. 内层循环从i+1位置开始遍历,仅统计了当前元素之后的元素,没有覆盖整个列表的所有元素
    2. 判断条件写反:你写的lst[i] < lst[j]是在统计比当前元素大的元素数量,和你要的「统计小于当前元素的数量」需求完全相反
基础修正版本

把计数变量移到外层循环内部每次重置,内层遍历全列表做判断即可:

lst = [1,2,3,4,5,6,7]
final = []
for current_num in lst:
    count = 0  # 每处理一个元素前先把计数清零
    for check_num in lst:
        if check_num < current_num:
            count += 1
    final.append(count)
print(final)

运行后输出为[0, 1, 2, 3, 4, 5, 6],和预期结果一致。

效率优化版本

上面的双重循环时间复杂度为O(n²),当列表长度较大时运行效率低。如果列表元素无重复,可以用排序加索引的方式把时间复杂度降到O(n log n):

lst = [1,2,3,4,5,6,7]
sorted_lst = sorted(lst)
final = [sorted_lst.index(num) for num in lst]
print(final)

如果列表存在重复元素,可以借助二分查找模块bisect实现,避免index方法返回错误的重复值索引:

import bisect
lst = [1,2,2,3,4,5]
sorted_lst = sorted(lst)
final = [bisect.bisect_left(sorted_lst, num) for num in lst]
print(final)

上述代码针对重复元素列表的输出为[0, 1, 1, 3, 4, 5],符合统计规则。

内容的提问来源于stack exchange,提问作者Vishwanath R Kulkarni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:06:24