在我的Python程序的某些部分,我有一个val变量,可以是1或0.如果它是1,我必须更改为0,如果它是0,我必须更改为1.
你是如何以Pythonic的方式做到的?
if val == 1:
val = 0
elif val == 0:
val = 1
太长了!
我做了:
swap = {0: 1, 1:0}
所以我可以使用它:
swap[val]
其他想法?
答案 0 :(得分:126)
这不是pythonic,但它是语言中立的。通常val = 1 - val
最简单。
答案 1 :(得分:22)
自python中的True == 1
和False == 0
,
你可以使用var = not var
它只会交换它。
答案 2 :(得分:15)
最短的方法是使用按位运算符XOR。
如果您想重新分配val
:
val ^= 1
如果您不想重新分配val
:
val ^ 1
答案 3 :(得分:9)
答案 4 :(得分:6)
在你的情况下,我推荐三元:
val = 0 if val else 1
如果您有2个变量要交换,您可以说:
(a, b) = (b, a)
答案 5 :(得分:3)
要展开answer by "YOU",请使用:
int(not(val))
示例:
>>> val = 0
>>> int(not(val))
1
>>> val = 1
>>> int(not(val))
0
请注意,此答案仅用于描述性而非规定性。
答案 6 :(得分:2)
如果你想做空:
f = lambda val: 0 if val else 1
然后:
>>> f(0)
1
>>> f(1)
0
答案 7 :(得分:1)
另一种选择:
val = (not val) * 1
答案 8 :(得分:1)
这是一种简单的方法:
val = val + 1 - val * 2
例如:
如果val为0
0+1-0*2=1
如果val为1
1+1-1*2=0
答案 9 :(得分:1)
最狡猾的方式可能是
int(not val)
但更简短的方法是
-~-val
答案 10 :(得分:1)
(0,1)[not val] 翻转val从0到1,反之亦然。
答案 11 :(得分:0)
你的方式运作良好!
怎么样:
val = abs(val - 1)
简短而简单!
答案 12 :(得分:0)
在看到所有这些简单的答案后,我想添加一个抽象的答案,但它的Pythonic虽然:
val = set(range(0,2)).symmetric_difference(set(range(0 + val, val + 1))).pop()
我们所做的只是返回2组的差异,即 [0,1] 和 [val] ,其中 val 为0或者1。
我们使用symmetric_difference()创建集合 [0,1] - [val] 和pop()以将该值分配给变量 val
答案 13 :(得分:0)
我在列表中交换了0和1。
这是我的清单:
list1 = [1,0,0,1,0]
list1 = [i^1 for i in list1]
*#xor each element is the list*
print(list1)
结果是:[0,1,1,0,1]
答案 14 :(得分:0)
另一种方式:
val = ~val + 2
答案 15 :(得分:0)
具有可变参数的函数。调用swaper()
每次都会返回不同的值。
def swaper(x=[1]):
x[0] ^= 1
return x[0]
答案 16 :(得分:-1)
使用np.where
例如。
np.where(val==0,1,0)
在val为0的情况下给出1,在val为0的情况下给出0,在您的情况下为