首页 > 解决方案 > 带有不起作用的 if 语句的 Python 嵌套理解

问题描述

这里的问题是,如果 da = 'Dagger' 则代码按预期工作并返回奇数。如果 da = 'Dager',输入错误,则它甚至不打印,并且 b 打印一个空列表。为什么?

we = [
    ["Dagger",           250,    None,   None,   200,    10,     None],
    ["Folding Stock",    500,    None,   None,   -300,   100,    None]]

da = "Dager"
print( da, we)
print()
weapon = [a for a in we if da in a]
print(weapon)
b = ["Even" if a == [] else "Odd" for a in we if da in a]

print('end', weapon, b)

以错误的“dager”输入运行

Dager [['''big edit here'''

[]
[]
end [] []

以良好的“匕首”输入运行

[['Dagger', 250, None, None, 200, 10, None]]
['Odd']
end [['Dagger', 250, None, None, 200, 10, None]] ['Odd']

Process finished with exit code 0

标签: pythonpython-3.x

解决方案


这是因为您编写的方式列出了理解。如果武器不在库存中,那么您就省略了这个案例。

正确的结构是:

[ expression if conditional else other thing if conditional2 for this many times ] 

你的代码:

b = ["Even" if a == [] else "Odd" for a in we if da in a]

附加"Even" if a == [] "Odd" for each a in we if da in a| 不正确!

应该是"Odd" if da in a for each a in we!the for 也涵盖“偶数”的情况。

试试这个:

b = ["Even" if a == [] else "Odd" if da in a else 'not' for a in we]

推荐阅读