0

混乱しているコードのスニペット:

equ2 = ['+', '10', '+', '2', '-', '2', '+', '4']
flag4 = [ ]

for k in equ2[:]:
    if equ2[equ2.index(k)-1] == '+':
        del(equ2[equ2.index(k)])
        flag4.append('-' + k)
    elif equ2[equ2.index(k)-1] == '-':
        del(equ2[equ2.index(k)])
        flag4.append('+' + k)
print flag4

*編集:変数を台無しにしました、申し訳ありません:x

* Edit2:もう一度申し訳ありませんがD:jedwards、それは私が得ている出力です、私はコピーされたリストから削除することによって他の出力を得ました

私が得ている出力:

['-10', '-2', '--', '-2', '-4']

私が欲しい出力:

['-10', '-2', '+'2, '-4']

'-'に到達すると、元のリスト(現在は+ --2 + 4に変更)をチェックし、'-'の前の項目が'+'であることがわかるため、'-を追加します。 -'、次に元のリストを再度チェックし(現在は+ 2 + 4)、2の前に' +'があるので、'-2'を追加します(その後は修正されます)。元のリストをずっとチェックしていますか?

4

2 に答える 2

2

最初の要素がリストから削除された後、変更しようとしているインデックスが同期していません。

ペアごとにループするより良い方法がありますが、一般的なケースでループが何をすべきかは明確ではありません

例えば。

>>> flag4 = [dict(['+-','-+'])[i] + j for i,j in zip(*[iter(equ2)]*2)]
>>> print flag4
['-10', '-2', '+2', '-4']
于 2012-06-27T01:04:21.283 に答える
2

これがこれを行うための最良の方法であるとは確信していません。次のように動作します

equ2 = ['+', '10', '+', '2', '-', '2', '+', '4']
flag4 = list()

chgsgn = dict([('+','-'), ('-','+')])

while len(equ2):
    sgn = equ2.pop(0)
    num = equ2.pop(0)

    flag4.append(chgsgn[sgn] + num)


print flag4

どの出力

['-10'、'-2'、'+2'、'-4']

編集:または、リスト内包表記を使用し、変更しないequ2:

chgsgn = dict([('+','-'), ('-','+')])
flag4 = [chgsgn[sgn]+num for (sgn,num) in zip(*[iter(equ2)]*2)]
print flag4

どちらも出力します

['-10'、'-2'、'+2'、'-4']
于 2012-06-27T01:12:40.397 に答える