具有“if”条件的单行多变量值赋值

时间:2015-07-16 11:30:03

标签: python

可以为多个变量赋值。

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条件实现此目的。我知道这会降低可读性。但仍有可能吗?我在这里做错了什么?

4 个答案:

答案 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 -> 1False -> 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.]