当前位置: 首页 > 面试题库 >

为什么foo = filter(...)返回一个 ,没有清单?

孙才捷
2023-03-14
问题内容

在Python IDLE 3.5.0
Shell中工作。根据我对内置“过滤器”功能的了解,它会根据您传递给它的内容返回列表,元组或字符串。因此,为什么下面的第一个分配有效,而第二个却不起作用(“

只是交互式Python提示)

>>> def greetings():
    return "hello"

>>> hesaid = greetings()
>>> print(hesaid)
hello
>>> 
>>> shesaid = filter(greetings(), ["hello", "goodbye"])
>>> print(shesaid)
<filter object at 0x02B8E410>

问题答案:

看看python文档filter(function, iterable)(从此处开始):

从这些 iterable 元素构造一个迭代器,为其 功能 返回true。

因此,为了获取列表,您必须使用列表类:

shesaid = list(filter(greetings(), ["hello", "goodbye"]))

但这可能不是您想要的,因为它试图greetings()在输入列表的值上调用的结果,即“
hello”,这将不起作用。迭代器类型也在这里起作用,因为直到使用它们(例如,通过调用list()它),才会生成结果。因此,起初您不会收到错误,但是当您尝试执行操作shesaid时将停止工作:

>>> print(list(shesaid))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

如果要检查列表中的哪些元素等于“ hello”,则必须使用以下方法:

shesaid = list(filter(lambda x: x == "hello", ["hello", "goodbye"]))

(我将您的函数放入lambda中,有关“正常”函数的信息,请参见Randy C的回答)



 类似资料:
  • 问题内容: 在Swift中,您可以使用if let可选绑定将可选内容解包为具有相同名称的常量或变量: 对于语句中的所有内容,可选项都被包装为常规int。 同样,我可以使用保护语句来达到类似的效果 但是,我不能使用这样的代码: 为什么不? 在保护语句中,如果保护语句的条件失败,则执行else子句,然后退出当前作用域。如果条件成功,则将从保护语句的右括号到当前作用域的结尾创建一个新的变量/常量。 为什

  • 问题内容: 在Java中,为什么以下代码行不起作用? 如果我将其更改为 起初,我以为您可能没有接口列表,但是我可以创建一个很好的接口。 有想法吗? 问题答案: 泛型类型比较古怪。 表示或任何子类型,但仅表示。如果您想要一个子类型,您需要 我怀疑你可以用 无法执行此操作的原因是,您可以使用对引用的引用,并且必须谨慎使用额外的间接级别。 使用泛型,您可以有两个间接级别,这会给您带来问题,因此它们更容易

  • 我正在创建一个进行线性探测以查找键索引的哈希图。如果键已经在索引中,我想增加它的值,而不是向新索引添加一个。 例如,如果我得到字符串“五,五,五”的字数,我的输出是五1,五1,五1,而不是五3。 我认为一定是我的 containsKey 方法,它使用 get 方法来检查我的密钥是否已在映射中。下面是我的Hashmap.java类。

  • 我使用下面代码执行分页查询,发现metadata为[],不应该是返回metadata:[total: 0]吗,有谁知道不?

  • 问题内容: 我正在阅读Lambda的状态:图书馆版,并对以下声明感到惊讶: 在 Streams 部分下,有以下内容: 该文件没有说明实际的内容,我也不知道它是否重要。 让我感到困惑的是:此代码块返回什么样的具体代码? 它将变量分配给,这是完全可以的。 也不决定要使用哪种列表。 均未指定的具体类型。 那么,这里使用的是什么 具体 类型(子类)?有保证吗? 问题答案: 那么,这里使用List的什么具体

  • 问题内容: 我有一个带有3个嵌套数组的简单php结构。 我不使用特定的对象,而是使用2个嵌套循环构建数组。 这是我要转换为Json的数组的var_dump的示例。 在另一个脚本中,我具有类似的结构并且工作正常。所以我不明白为什么在这里不起作用。 编辑:似乎有编码问题。当返回ASCII,该作品但当它返回UTF8,它不工作了。 Edit2:返回表示:格式错误的UTF-8字符,可能编码不正确。 问题答案