在列表理解的 else 块中赋值

Posted

技术标签:

【中文标题】在列表理解的 else 块中赋值【英文标题】:assign value in else block of list comprehension 【发布时间】:2020-12-12 10:47:25 【问题描述】:

我想引用两个列表并通过比较生成一个输出列表。

occupied = [8,9,10]
broken = [1,2,3]

output = ['occupied' if x in occupied else x in broken for x in range(1,11)]
desired_output = ['broken', 'broken', 'broken', 'broken', False, False, False, 'occupied', 'occupied', 'occupied']

有没有可能一次性实现以上目标?

目前我正在进行两次迭代

['broken' if x2==True else x2 for x2 in ['occupied' if x in occupied else x in broken for x in range(1,11)] ]

我正在寻找类似的东西

['occupied' if x in occupied else 'broken' if x in broken for x in range(1,11)]

但这是不正确的语法

【问题讨论】:

4 应该是False,不是吗? 【参考方案1】:

您几乎拥有它,只需在您的解决方案中添加一个else 子句(第二个if 表达式):

output = ["broken" if x in broken else 'occupied' if x in occupied else False for x in range(1,11)]
# Out[5]: ['broken', 'broken', 'broken', False, False, False, False, 'occupied', 'occupied', 'occupied']

【讨论】:

【参考方案2】:

如果我理解正确,这应该对你有用

occupied = [8,9,10]
broken = [1,2,3]
["occupied" if x in occupied else "broken" if x in broken else False for x in range(1,11)]

输出:

['broken',
 'broken',
 'broken',
 False,
 False,
 False,
 False,
 'occupied',
 'occupied',
 'occupied']

【讨论】:

以上是关于在列表理解的 else 块中赋值的主要内容,如果未能解决你的问题,请参考以下文章

verilog 如何处理需要在两个always 中赋值的变量

在verilog HDL语言中的阻塞赋值和非阻塞赋值究竟有啥不同?同一变量在不同的过程块中(同时触发)又是如

阻塞赋值和非阻塞赋值

切片整个列表的切片赋值和直接赋值有啥区别?

DB数据块中的数据如何赋值

如何在 <%=value%> 类型的块中强制执行赋值