使用一行 if 语句将项目添加到列表中

问题描述 投票:0回答:2

我有以下代码:

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 语句,但我得到了无效的语法。有什么想法吗?

python-3.x if-statement one-liner
2个回答
0
投票

感谢用户@Luuk,它展示了这篇文章,它告诉了一些使用一行if语句的方法,这有助于我更多地了解Python中的这段代码实践。


0
投票

这个任务确实有点“奇怪”,所以让我们尝试解决它:-D

首先是一个简单的示例,如何使用原始列表进行操作如果不需要分配给 y

x.append(10) if a else None

如果 aTrue - 将使用 x.append(10) 部分。在这种情况下,函数append(10)会将10加到x上并返回None作为结果。

如果 aFalse - 而不是调用 x.append(10) - 将采用右侧的 None

因此,在这两种情况下 - 与值 a 无关 - 此行的结果将为 None,但如果 aTrue - 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 的右侧),范围中的表达式将像这样工作:

  • 先执行x.append(10)操作,结果为None
  • 现在执行操作。因为 or 左边的第一个操作数是 None - 需要使用第二个操作数作为结果。这样就可以使用已经更新的x

注意:如果您有更复杂的列表(例如使用比字符串或数字更复杂的对象) - 您可能需要使用 copy.copy()copy.deepcopy() 操作而不是直接分配给 y。

© www.soinside.com 2019 - 2024. All rights reserved.