我正在研究列表理解
[0 if N<2 else val*2 for val in range(0,N//2)]
当N <2时我期望输出为[0],但我得到[]
答案 0 :(得分:3)
如果为N = 1
,则为N//2 = 0
。因此您的for循环未执行,因为它的范围是0到0。您可以执行[val * 2 for val in range(0, N // 2)] if N >= 2 else [0]
答案 1 :(得分:2)
这是从计算机角度读取您的表情的方式。
[(0 if N < 2 else val * 2) for val in range(0, N // 2)]
因此for
位首先发生。并且如果N
小于2
,则range(0, N // 2)
为空,因此0 if N < 2 else val * 2
位将永远不会执行。
在您的情况下,仅包含两种不同的情况会更有意义。
if N < 2:
return [0]
else:
return [val * 2 for val in range(0, N // 2)]
或者,如果您要一行,
[0] if N < 2 else [val * 2 for val in range(0, N // 2)]
答案 2 :(得分:0)
1 // 2为0,因此您有一个范围为(0,0)的空列表,因此完全不执行列表推导的map部分。
如果要得到N <2的[0],则可能需要这样做:
[val*2 for val in range(0,N//2)] if N<2 else [0]
答案 3 :(得分:0)
对我有用。尝试以下操作:
N = 3
a = [0 if N<2 else val*2 for val in range(0,N//2)]
#output: [0]
答案 4 :(得分:0)
或者做列表索引:
print([[val * 2 for val in range(0, N // 2)],[0]][N<2])
或dict.get
:
print({0:[val * 2 for val in range(0, N // 2)],1:[0]}.get(N<2))
两者都能再现预期的结果。