以0和0交换1,以Pythonic方式与1交换

时间:2009-11-22 17:10:35

标签: python

在我的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]

其他想法?

17 个答案:

答案 0 :(得分:126)

这不是pythonic,但它是语言中立的。通常val = 1 - val最简单。

答案 1 :(得分:22)

自python中的True == 1False == 0

你可以使用var = not var

它只会交换它。

答案 2 :(得分:15)

最短的方法是使用按位运算符XOR。

如果您想重新分配val

val ^= 1

如果您不想重新分配val

val ^ 1

答案 3 :(得分:9)

另一种可能性:

i = (1,0)[i]

只要我是肯定的,这很有效,因为dbr在评论中指出它不起作用i< 0

您确定不想使用FalseTrue吗?听起来很像。

答案 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,在您的情况下为