为什么会出现以下行为?我希望结果只有1。
declare @X xml;
if @X is not null
set @X.modify('replace value of text()[1] with "1"');
由于In [77]: a = 1
In [78]: [a if a else s for s in [0, 1,0]]
Out[78]: [1, 1, 1]
不为空,因此列表中的值应仅为a
。
此处a
只应在else
为a
时执行。
编辑:如果None
不是a
,我想在列表中插入a
,否则在列表中插入None
。< / p>
答案 0 :(得分:2)
这是正常行为。您正在遍历包含三个数字的列表。 if a
总是如此。因此,a if a
执行三次。这就是为什么你将三个a
添加到列表中的原因。
关于您的最新修改:
如果a不是None,我想在列表中插入一个,否则在列表中插入s。
好的,那么你这样做:
res=[]
if a:
res.append(a)
else:
for s in [0,1,0]:
res.append(s)
答案 1 :(得分:1)
a if a else s
如果是真的,则评估为a
。 a
永远不会改变,所以无论你在列表理解中迭代什么,你都会得到同样的东西:a
的列表,只要你迭代的是什么。
也许你想要这个?
[a] if a else [0, 1, 0]
如果a
是真实的,则此表达式将评估为包含a
的列表,否则它将评估为您提供的列表。
答案 2 :(得分:0)
没有必要将else放在括号内。
>>> a = 1
>>> [a] if a else [0, 1, 0]
[1]
>>> a = None
>>> [a] if a else [0, 1, 0]
[0, 1, 0]