[英]Why am I getting an empty list instead of [0] when N=1
I am working on list comprehension 我正在研究列表理解
[0 if N<2 else val*2 for val in range(0,N//2)]
when N<2 I expect out put to be [0] but I am getting [] 当N <2时,我期望输出为[0],但我得到[]
If N = 1
, then N//2 = 0
. 如果
N = 1
,则N//2 = 0
。 So your for loop is not executing, since it would be a range from 0 to 0. You can do [val * 2 for val in range(0, N // 2)] if N >= 2 else [0]
因此您的for循环未执行,因为它的范围是0到0。
[val * 2 for val in range(0, N // 2)] if N >= 2 else [0]
可以执行[val * 2 for val in range(0, N // 2)] if N >= 2 else [0]
This is how your expression is read from the computer's perspective. 这是从计算机的角度读取您的表情的方式。
[(0 if N < 2 else val * 2) for val in range(0, N // 2)]
So the for
bit happens first. 因此,
for
位第一反应。 And if N
is less than 2
, then range(0, N // 2)
is empty, so the 0 if N < 2 else val * 2
bit never actually executes. 如果
N
小于2
,则range(0, N // 2)
为空,因此0 if N < 2 else val * 2
位为0 if N < 2 else val * 2
该位将不会实际执行。
In your case, it would make more sense to simply have two different cases. 在您的情况下,仅具有两个不同的情况会更有意义。
if N < 2:
return [0]
else:
return [val * 2 for val in range(0, N // 2)]
Or, if you want it in one line, 或者,如果您想要一行,
[0] if N < 2 else [val * 2 for val in range(0, N // 2)]
1//2 is 0, so you have range(0, 0) which is an empty list, hence the map part of the list comprehension isn't executed at all. 1 // 2为0,因此您有一个range(0,0)这是一个空列表,因此完全不执行列表推导的map部分。
If you want to get [0] for N<2 you probably want to do it like this: 如果要得到N <2的[0],则可能需要这样做:
[val*2 for val in range(0,N//2)] if N<2 else [0]
it works for me. 这个对我有用。 try the following:
尝试以下方法:
N = 3
a = [0 if N<2 else val*2 for val in range(0,N//2)]
#output: [0]
Or do list indexing: 或做列表索引:
print([[val * 2 for val in range(0, N // 2)],[0]][N<2])
Or dict.get
: 或者
dict.get
:
print({0:[val * 2 for val in range(0, N // 2)],1:[0]}.get(N<2))
Both reproduce the expected result. 两者均重现预期结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.