Python中如何筛选数值列表里以数字3结尾的元素
解决列表筛选以3结尾元素的问题
首先得指出你代码里的问题:第二个循环的索引逻辑错啦!你在遍历output_list时,i本身就是列表里的字符串元素,要判断它的最后一位,应该直接用i[-1](Python的负索引可以直接取最后一个元素,比len(i)-1更简洁),而不是写output_list[len(i)-1]——这个写法是拿字符串的长度当索引去取output_list里的元素,完全偏离了判断当前元素结尾的逻辑。
而且你当前的代码只是打印整个列表,没有把符合条件的元素收集到最终结果里,其实我们可以把转字符串和筛选的步骤合并,不用先单独转整个列表,一步完成更高效。
修正后的完整代码
x = [12, 43, 4, 1, 6, 343, 10, 34, 12, 93, 783, 330, 896, 1, 55] output_list = [] for num in x: # 将整数转为字符串,取最后一位判断是否为'3' if str(num)[-1] == '3': output_list.append(num) # 若需要字符串结果,可改为append(str(num)) print(output_list)
运行结果
[43, 343, 93, 783]
关键步骤解释
- 直接遍历原列表的整数元素,无需提前把整个列表转成字符串列表,节省内存开销
str(num)[-1]:利用Python负索引特性,快速获取字符串最后一位,比计算长度再索引的写法更直观- 判断通过后,将原整数添加到结果列表(如果需求是保留字符串形式,替换成
append(str(num))即可)
你的错误代码分析
你之前的第二个循环:
for i in output_list: if(output_list[len(i) -1]=='3'): print(output_list)
这里的核心问题:
output_list[len(i)-1]逻辑错误:len(i)是当前字符串的长度,比如i是'12'时长度为2,len(i)-1是1,此时output_list[1]取的是列表里的第二个元素'43',根本不是在判断当前i的结尾- 就算判断逻辑正确,你打印的是整个
output_list,没有把符合条件的元素收集到目标列表里
另外,也可以用列表推导式简化代码,一行就能完成:
x = [12, 43, 4, 1, 6, 343, 10, 34, 12, 93, 783, 330, 896, 1, 55] output_list = [num for num in x if str(num)[-1] == '3'] print(output_list)
这个写法和循环版本效果完全一致,更简洁优雅。
内容的提问来源于stack exchange,提问作者Nueva Generacion HMG
相关产品推荐
相关产品推荐

