这里的问题是,如果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
它不会输出您期望的内容,因为列表理解的不同部分执行的顺序不同
[a for a in we if da in a]
上面的一行根据
we
中的项目生成项目列表。该列表仅包括包含da
的项。如果da
是“Dagger”,则返回的列表包含一项,因为we
中的一项包含字符串“Dagger”。如果da
是“Dager”,则列表包含0项,因为we
的任何项中都不存在“Dager”第二个列表理解的工作原理类似,但在初始筛选之后应用额外的步骤
["Even" if a == [] else "Odd" for a in we if da in a]
此部分-
"Even" if a == [] else "Odd"
仅对通过筛选器的每个项目运行-if da in a
。因为没有项目通过“Dager”的过滤器,所以偶数/奇数部分永远不会运行,从而导致空列表这不是理解的问题。你说如果da='Dager'那么b是空的,这是意料之中的
尝试下面的方法,找出python为什么会这样做
第一个打印为True,因为“匕首”==“匕首”
第二个打印为False,因为“Dager”!='匕首
如果希望python忽略“Dagger”中的“g”数量,则需要正则表达式
此外,在理解中使用嵌套if是一个坏主意,它缺乏可读性。试试过滤器
结果将只包含“奇数”,因为项将始终至少包含da,这使得“if item”始终为真
若你们想把那个些嵌套列表变成“奇数”若包含da,你们应该使用map
更新:如果武器不在列表和子列表中,则返回错误
这更容易,你可以使用任何
这是因为你写的方式你列出了理解力。可以这么说,如果武器不在库存中,你就忽略了这个案子
正确的结构是:
您的代码:
追加}
}不正确
"Even"
{"Odd"
{应该是
"Odd" if da in a for each a in we
!对于“偶数”的情况也适用试试这个:
相关问题 更多 >
编程相关推荐