Python中的列表解析:如果不工作

xxhby3vn  于 2023-01-16  发布在  Python
关注(0)|答案(2)|浏览(164)

我试图在一个列表中添加一个等价于变量数的False数,如果变量不为0,它就起作用。我试图在变量为0时添加一个“else”语句,但它不起作用。
下面是我的累:

floors = 5

blocked_floor = [False for i in range(floors) if (floors > 0) else False]
blocked_floor1 = [False for i in range(floors) if (floors > 0) else False for i in range(1)]

关于这个问题有很多主题,但是我试了所有的方法,都没有效果。我在“其他”上有一个synthax错误。
你对这个问题有什么想法吗?

z9smfwbn

z9smfwbn1#

你的语法确实错了。
取代:

blocked_floor1 = [False for i in range(floors) if (floors > 0) else False for i in range(1)]

您想要:

blocked_floor1 = [False for i in range(floors) if floors > 0] if floors > 0 else False

或者:

blocked_floor1 = [False for i in range(floors) if floors > 0] if floors > 0 else [False]

不同之处在于,在第一种情况下,blocked_floor1将是False,而在第二种情况下,它将是[False]。我认为第一种情况更可取,因为如果楼层是1或0,否则你将无法计算高度。
但是,除了语法错误之外,整个代码似乎毫无意义,最后,您在一个列表中有一个floors乘以False的列表。
所以,你不妨:

blocked_floor = [False] * floors if floors > 0 else False  # or, again, [False]

这可能是因为你没有提供一个你实际上试图解决的问题的例子。

xkftehaa

xkftehaa2#

出现语法错误是因为您需要完成条件,然后继续迭代。您需要执行以下操作:

blocked_floor = [False if floors > 0 else False for i in range(floors)]

另外,我认为你不需要条件,因为不管floor的值是多少,你都只需要加上False。下面的代码做了同样的事情,但更简单:

blocked_floor = [False for i in range(floors)]

我不太清楚您要对blocked_floor1执行什么操作。
我还发现以下教程页面很有帮助:https://riptutorial.com/python/example/767/conditional-list-comprehensions

相关问题