开发者社区 问答 正文

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

我正在研究列表理解

[0 if N<2 else val*2 for val in range(0,N//2)]
当N <2时,我期望得出[0]但我得到了[]

展开
收起
一码平川MACHEL 2019-01-16 17:29:57 1537 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 这就是从计算机的角度阅读表达式的方法。

    [(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)]


    如果N = 1,那么N//2 = 0。所以你的for循环没有执行,因为它的范围是0到0.你可以这样做[val * 2 for val in range(0, N // 2)] if N >= 2 else [0]

    2019-07-17 23:25:42 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等