0

在类过滤器的变量上应用命令列表(Python)时,我似乎遗漏了一些东西。下面是对应的代码:

test_letters = ['o','o', 'a', 'a', 'b', 'b', 'd', 'e', 'i', 'j', 'o', 'a']

def filterlet(letter):
    vowels = ['a', 'e', 'i', 'o', 'u']

    if(letter in vowels):
        return True
    else:
        return False

test_filter = filter(filterlet, test_letters)
l_list = list(test_filter)
print(l_list)
l_list = list(test_filter)
print(l_list)

结果是

['o', 'o', 'a', 'a', 'e', 'i', 'o', 'a']

[]

我不明白为什么在过滤器测试“test_filter”上应用内置函数“list”会使其为空(l_list 的第二次调用显示空输出)。

谢谢!

4

2 回答 2

1

filter您应该使用 (filterlet, test_letters)再次调用函数。

filter将 object转换filterlist.

test_filter = filter(filterlet, test_letters)
l_list = list(test_filter)
print(l_list)
## call once again with filter function
test_filter = filter(filterlet, test_letters)
l_list = list(test_filter)
print(l_list)
于 2020-06-15T15:27:38.917 回答
0

filter(function or None, iterable) --> 过滤器对象

返回一个迭代器,产生那些 function(item) 为真的可迭代项。如果 function 为 None,则返回为 true 的项目。

您第一次从过滤器的输出中获得了所有结果,因此之后您将一无所获。

于 2020-06-15T15:28:02.753 回答