当N = 1时,为什么我得到一个空列表而不是[0]

时间:2019-01-16 01:56:34

标签: python python-3.x

我正在研究列表理解

[0 if N<2 else val*2 for val in range(0,N//2)]

当N <2时我期望输出为[0],但我得到[]

5 个答案:

答案 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))

两者都能再现预期的结果。