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

如何从数字列表中提取3位和4位数字?Python代码问题求助

需求与问题

给定列表 lst = [1001, 21, 1, 404, 200, 12010],需要筛选出其中的3位和4位数字,期望结果为 [1001, 404, 200]。

以下是两段尝试但失败的代码:

第一段错误代码

>>> lst = [1001, 21, 1, 404, 200, 12010, 2002]
>>> str_lst = str(lst)

>>> new_lst = [len(number) for number in str_lst]
>>> print(new_lst)

运行结果:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

第二段错误代码

new_lst = [len(str(number)) for number in lst]

print(new_lst)

for number in new_lst == 3 and number in new_lst == 4: 

   final_result.append(number)

print(final_result)
错误原因分析
  • 第一段代码问题:将整个列表转为字符串str_lst后,遍历的是字符串的单个字符(比如[、1、0等),每个字符的长度都是1,因此输出全为1的列表,完全没处理到列表中的目标数字。
  • 第二段代码问题:
    • 生成的new_lst是各数字的长度列表,但后续循环逻辑错误:new_lst == 3会返回布尔值False,False and ...结果仍为False,循环根本不会执行;
    • 就算逻辑正确,代码也只是将长度值添加到结果,而非原数字,不符合需求。
正确实现代码

方法一:列表推导式(简洁高效)

直接遍历原列表,判断每个数字转字符串后的长度是否为3或4,符合条件就保留原数字:

lst = [1001, 21, 1, 404, 200, 12010]
final_result = [num for num in lst if 3 <= len(str(num)) <= 4]
print(final_result)  # 输出: [1001, 404, 200]

方法二:普通循环(更直观)

lst = [1001, 21, 1, 404, 200, 12010]
final_result = []
for num in lst:
    num_len = len(str(num))
    if num_len == 3 or num_len == 4:
        final_result.append(num)
print(final_result)  # 输出: [1001, 404, 200]

方法三:数学范围判断(仅适用于正整数)

如果列表中都是正整数,可以不用转字符串,直接通过数值范围判断:

lst = [1001, 21, 1, 404, 200, 12010]
final_result = [num for num in lst if 99 < num < 10000]
print(final_result)  # 输出: [1001, 404, 200]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:20:59