python - 带有不起作用的 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
解决方案
这是因为您编写的方式列出了理解。如果武器不在库存中,那么您就省略了这个案例。
正确的结构是:
[ 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]
推荐阅读
- c# - C# - 从动态方法调用具有“参数字符串 []”的委托
- java - 如何从 Java 中的子类调用 int 或 string
- java - 带有 Spinner 的 AndroidStudio 对话框
- python - 如何解决导出到 csv 文件的 unicode 错误(python)
- macos - 如何制作一个非技术Mac用户可以通过双击下载和运行的脚本?
- data-structures - 有人可以检查 insertatend 函数发生了什么.. 它没有创建 main 函数中提到的所有块
- node.js - 将所有 API 请求保存到 mongoDB unitl 微服务已启动
- vba - 如何从一个单元格中获取不同的时间值,但在不同的单元格中?
- ruby-on-rails - 然后,如何确保仅在 Rails 5.2.1 中呈现 json 时才读取时间
- php - 基于标头响应的 PHP 301 重定向