(向下滚动到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有点新手,所以如果你能使用外行的术语来帮助我更好地理解。
答案 0 :(得分:0)
您的类型检查应为isinstance(item, str)
和isinstance(item, int)
。此外,您的第一个过滤器似乎会混淆x
和item
的内容。我期待NameError
wrt。 x
将被提升。