带过滤函数的lambda表达式; var类型的问题

时间:2016-03-10 15:25:12

标签: python lambda filter

(向下滚动到tl; dr版本的最后两段)

我遇到过filter命令和lambda函数的问题:

sample_list = ["Fri", 4, "Sat", 6, "Sun", 4, 8.50]
for item in sample_list:
    day = filter(lambda item: item is str and sample_list.index(x) >= sample_list.index(item), sample_list)
    print item
    print type(item)
    hours = filter(lambda x: x is int and sample_list.index(x) >= sample_list.index(item) + 1, sample_list)
    print day, hours

(对不起,如果有点长)

输出读取项类型为str,例如,即使lambda表达式中的“item is str”条件求值为false,也返回[]。 以下是示例输出:

Fri
(type 'str')
[] []
4
(type 'int')
[] []
Sat
(type 'str')
[] []
6
(type 'int')

虽然我希望输出读取 Fri 4 Sat 6

之类的内容

我很困惑为什么lambda表达式似乎评估为False为“item is str”或“item is int。”

为了记录,我知道打印语句应该有括号,我只是使用Python的Web浏览器学习工具,我假设运行旧版本。当我使用3.4.3版本时,输出会返回类似的内容(我没有实际的输出,就像那样)。我已经找到了解决这个特定问题的方法,但我无法做出正面或反面的解决方案。

归结为什么是我认为lambda表达式混淆变量类型存在问题。如果你能提供建议,我真的很感激。另外,我对Python有点新手,所以如果你能使用外行的术语来帮助我更好地理解。

1 个答案:

答案 0 :(得分:0)

您的类型检查应为isinstance(item, str)isinstance(item, int)。此外,您的第一个过滤器似乎会混淆xitem的内容。我期待NameError wrt。 x将被提升。