可以为多个变量赋值。
a, b = 5, 10
我需要根据条件分配这些值,我尝试过,
a, b = 1, 1 if c == 1 else 5, 10
结果是ValueError
。
ValueError:要解压缩的值太多
我尝试了两个条件,并取得了成功。
a, b = 1 if c == 1 else 5, 1 if c == 1 else 10
但我需要使用单个if
条件实现此目的。我知道这会降低可读性。但仍有可能吗?我在这里做错了什么?
答案 0 :(得分:12)
您可以将(a, b)
括在括号中来实现此目的。
a, b = (1, 1) if c == 1 else (5, 10)
当前代码相当于
a, b = 1, (1 if c == 1 else 5), 10
当您尝试将3元组解压缩为两个变量时,会出现值错误。
答案 1 :(得分:5)
您还可以使用c == 1
:
a, b = ((5, 10), (1, 1))[c == 1]
c == 1
的结果可能是True -> 1
或False -> 0
,因此如果条件评估为True,我们将最终获取(1, 1)
即索引1
(5, 10)
0
,如果它是假的。
答案 2 :(得分:2)
试试这个:
a, b = ((a, b) if c == 1 else (5, 10))
或者
a, b = (a, b) if c == 1 else (5, 10)
答案 3 :(得分:0)
如果你正在处理向量,你也可以使用 numpy。
import numpy as np
condition = np.arange(10) > 5
x = np.ones(10)
y = np.zeros(10)
(a,b) = np.where(condition, (x,y), (y,x))
print(a)
[0. 0. 0. 0. 0. 0. 1. 1. 1. 1.]
print(b)
[1. 1. 1. 1. 1. 1. 0. 0. 0. 0.]