如何从数字列表中提取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
相关产品推荐
相关产品推荐

