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

Python filter函数返回filter对象而非预期列表问题求解

问题产生原因

Python 3 版本中内置的filter()函数返回值是惰性求值的filter迭代器对象,不会像Python 2版本那样直接返回存储了所有筛选结果的列表。直接输出这个迭代器时,控制台只会打印对象的类型和内存地址,也就是你看到的<filter at 0x261e956f340>内容,不会展示筛选后的具体元素。这是Python跨版本的常见语法差异,不少基于Python 2编写的旧教程没有标注版本区别,很容易让使用者踩这个坑。

修复方案

只需要用list()方法把filter()返回的迭代器转换成列表类型,就能得到预期的列表结果,修改后的完整代码如下:

def filter_words(word_list, letter):
    return list(filter(lambda word: word[0]==letter, word_list))

l = ['hello','are','cat','dog','ham','hi','go','to','heart']
filter_words(l, 'h')

运行上述代码就会返回预期结果:['hello', 'ham', 'hi', 'heart']

  • 可选优化:如果你的单词列表中可能存在空字符串,直接取word[0]会触发索引越界报错,可以把判断逻辑替换为字符串自带的startswith()方法,更贴合“判断单词是否以指定字母开头”的语义,兼容性也更好。你也可以直接用列表推导式实现相同逻辑,可读性更高:
def filter_words(word_list, letter):
    return [word for word in word_list if word.startswith(letter)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:30:52