简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM