如何在python中使用和运算符?

时间:2013-05-30 13:34:07

标签: python conditional operator-keyword

我想创建一个函数,如果两个char都包含它,它将从两个char序列中删除' - '。这是我的代码。

def normalized(seq1, seq2):
    x = ''
    y = ''
    for a, b in zip(seq1, seq2):
    if a != '-' and b != '-':
        print a,b, 'add'
        x += a
        y += b
    else:
        print a, b, 'remove'
return x,y

x = 'ab--dfd--df'
y = 'rt-bfdsu-vf'

print normalized(x, y)

这就是结果。

a r add
b t add
- - remove
- b remove
d f add
f d add
d s add
**- u remove**
- - remove
d v add
f f add
('abdfddf', 'rtfdsvf')

您可以看到不应删除-u。我的代码出了什么问题?

5 个答案:

答案 0 :(得分:4)

您想使用or,而不是and ...


另一种聪明的方法是使用operator chaining

if a == b == '-':
   print a,b, 'remove'
else:
   print a,b, 'add'
   x += a
   y += b

这非常简洁明了,只有当它们出现在两个字符串中时才要删除短划线。

答案 1 :(得分:3)

如果你只想删除两个都是-,那么请测试一下:

if not (a == '-' and b == '-'):

可以缩短为:

if not (a == b == '-'):

或使用or代替and删除not

if a != '-' or b != '-':

但这不是可读的。

也许没有更多的可读性,但列表理解将是:

def normalized(seq1, seq2):
    return [''.join(v) for v in zip(*[(a, b) 
                for a, b in zip(seq1, seq2) if not (a == b == '-')])]

或使用map(),足以支持Python 2:

def normalized(seq1, seq2):
    return map(''.join, zip(*[(a, b) for a, b in zip(seq1, seq2) if not (a == b == '-')]))

答案 2 :(得分:1)

条件应为not (a =='-' and b == '-')

def normalized(seq1, seq2):
    x = ''
    y = ''
    for a, b in zip(seq1, seq2):
        if not (a =='-' and b == '-'):  # you need `not` here
            print a,b, 'add'
            x += a
            y += b
        else:
            print a, b, 'remove'
    return x,y

x = 'ab--dfd--df'
y = 'rt-bfdsu-vf'

print normalized(x, y)

答案 3 :(得分:0)

根据您的代码,- u应该删除。

事实上,

a != '-' and b != '-' is False

第一部分是假的,第二部分是真的。假和真是假的。 (布尔代数101,详见http://en.wikipedia.org/wiki/Boolean_algebra#Basic_operations

答案 4 :(得分:0)

当a和b不是“ - ”时,您当前要求程序匹配。这意味着,除非两者不等于“ - ”,否则它将转到您的其他地方。你想要的代码是:

def normalized(seq1, seq2):
    x = ''
    y = ''
    for a, b in zip(seq1, seq2):
        if a == '-' and b == '-':
            print a,b, 'remove'
        else:
            print a, b, 'add'
            x += a
            y += b
    return x,y

x = 'ab--dfd--df'
y = 'rt-bfdsu-vf'

print normalized(x, y)