我有以下代码:
a = True
x = [2, 7, 8]
print(x)
if a:
x.append(10)
print(x)
# one line ???
y = [2, 7, 8 if a: 10]
print(y)
我试图在一行中使用 if 语句,但我得到了无效的语法。有什么想法吗?
感谢用户@Luuk,它展示了这篇文章,它告诉了一些使用一行if语句的方法,这有助于我更多地了解Python中的这段代码实践。
这个任务确实有点“奇怪”,所以让我们尝试解决它:-D
首先是一个简单的示例,如何使用原始列表进行操作如果不需要分配给 y:
x.append(10) if a else None
如果 a 为 True - 将使用 x.append(10) 部分。在这种情况下,函数append(10)会将10加到x上并返回None作为结果。
如果 a 是 False - 而不是调用 x.append(10) - 将采用右侧的 None。
因此,在这两种情况下 - 与值 a 无关 - 此行的结果将为 None,但如果 a 为 True - 10 将被附加到 x 。
当我们有条件地将 10 附加到 x 并将结果分配给变量 y 时 - 原理是相同的,但构造更复杂一点(我们不能使用 None 进行赋值,所以我们应该首先如果需要,将 10 附加到 x,然后才将 x 分配给 y)。以下是此类分配的示例:
y = x if not a else (x.append(10) or x)
原理和之前类似,但是两种情况下我们都应该得到x的结果。如果不更新 x,很简单:直接使用 x(见左侧)。
如果 x 应该更新(即 else 的右侧),范围中的表达式将像这样工作:
注意:如果您有更复杂的列表(例如使用比字符串或数字更复杂的对象) - 您可能需要使用 copy.copy() 或 copy.deepcopy() 操作而不是直接分配给 y。