2013-07-17 47 views
1

我尝试写一些代码,如果某occurence发生,具体的数量已经更改为 - 即数。 我有下面的代码至今:转换为整数的负面

x=6 

for words in foo: 
    if "bar" in words: 
     crazy_function(x) 
    else: 
     pass 

如果词“吧”是的话,X就需要站出来为-6,如果不是在口头上,它需要站出来为+ 6。 然而,在某些情况下,x = -6,在这种情况下,如果栏中有文字,它需要变为正值。 我需要将“crazy_function()”替换为实际可用的东西。

+3

'X = -x'不为你工作? –

回答

13

使用否定运算符:

x=6 

for words in foo: 
    if "bar" in words: 
    x = -x; 
0

Multipy -1多少?这似乎是最简单的方法。

6

“疯狂功能” 是微不足道的实施:

def crazy_function(x): 
    return -x 

使用方法如下:

if "bar" in words: 
    x = crazy_function(x) 

或者干脆在网上它:

if "bar" in words: 
    x = -x 

要使它甚至更短,正如@kroolik指出的那样:

x = -x if "bar" in words else x 
+1

'X = -x如果还有的话这就是x'内联“吧”:C –

+0

@kroolik是的,这就是更短的:)我编辑我的回答你的建议,谢谢! –

+0

@kroolik:它不会更短,更长。 'len('if'bar'in words:x = -x')== 25'。 'len('x = -x如果“bar”在其他语言中是x')== 31'。它的可读性也稍差,并且将'x'重新分配给'x'不变,这有点令人困惑。那么...有什么优势? – abarnert

1

嘛,总是有老待命,乘法。

x *= -1 
+2

这里有一个操作符,它被称为负号 –

+3

如果你真的想变得疯狂,为什么不'x - = x + x'?那么你甚至不需要乘法。:) – abarnert

+1

@abarnert'x * =(x-1)%-x''x%= 2 * -x''x =〜x + 1''x =(x^-1)+ 1' – 2rs2ts

4

目前已经是一个功能,这在标准库:neg

在这种情况下,如果您只需要一个表达式,并且没有什么理由必须将它作为函数,那么使用neg就很愚蠢。比较:

if "bar" in words: 
    x = operator.neg(x) 

if "bar" in words: 
    x = -x 

第二个显然更可读,以及更短。

但是,有些情况下您实际上需要一个功能。在那种情况下,neg比在飞行中创建功能要好。比较:

foo = map(operator.neg, bar) 

foo = map(lambda x: -x, bar) 

(当然,在这种情况下,你可以只写foo = (-x for x in bar) ...但不是每一个高阶函数映射到理解条款。)

+0

令人惊讶的是,更深层次的知识可以从岩石中产生牛奶......(在这种情况下,从一个极其微不足道的问题中得到一个非常有趣的答案......) – heltonbiker

0
x = x*([-1 for words in foo if 'bar' in words]+[1])[0]