0

両方に含まれている場合、2 つの 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私のコードの何が問題になっていますか?

4

5 に答える 5

4

を使用したいのですがorand...


これを行う別の巧妙な方法は、演算子チェーンを使用することです。

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

これは非常に簡潔で、ダッシュが両方の文字列に含まれる場合にのみダッシュを削除する必要があることを明確に示しています。

于 2013-05-30T13:40:12.037 に答える
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 == '-')]))
于 2013-05-30T13:39:51.973 に答える
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)
于 2013-05-30T13:39:52.087 に答える
0

あなたのコードによると、- u削除する必要があります。

実際には、

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

最初の部分は false で、2 番目の部分は true です。False と True は False です。(ブール代数 101、詳細はhttp://en.wikipedia.org/wiki/Boolean_algebra#Basic_operationsを参照)

于 2013-05-30T13:41:03.110 に答える
0

現在、a と b が「-」でない場合にプログラムが一致するように求めています。これは、両方が「-」に等しくない限り、else に移動することを意味します。必要なコードは次のとおりです。

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)
于 2013-05-30T13:45:53.880 に答える