2016-03-20 3 views
1

私はこの機能で3つのバグを見つけてリストの順序を逆転しようとしています。この関数は、リストの最初と最後の要素、2番目と2番目の要素の順番を逆転させます。私は2つを見つけたと信じていますが、list[j] = yの行を修正することに問題があります。スワップエンドでリストを逆にする

def reverse(list): 
    """Reverses elements of a list.""" 
    for i in range(len(list)): 
     j = len(list) - i 
     x = list[i] 
     y = list[j-1] 
     list[i] = x 
     list[j] = y 

l = ['a', 'b', 'c', 'd', 'e'] 
reverse(l) 
print(l) 
+0

コードを理解していますか?あなたはどの2つの要素を交換しているのかを見てみてください...それは明らかです。また、各要素を何回交換しているかについても注意してください(古いLaurelとHardyのコメディがこの要素を見つけるのを助けるかもしれません)。 – Amadan

+1

'mylist [:: - 1]'の何が問題なのですか? – Evert

+3

@Evert:宿題をデバッグしていると仮定します。要点はリストの逆転を書くことではなく、誤った論理を見つけることです。 – Amadan

答えて

-1

その結果

def reverse(list): 
    """Reverses elements of a list.""" 
    for i in range(len(list)/2): 
     j = i + 1 
     x = list[i] 
     y = list[-j] 
     list[-j] = x 
     list[i] = y 

l = ['a', 'b', 'c', 'd', 'e'] 
l=reverse(l) 
print(l) 

。最初の問題はlist[j-1] = xの代わりにlist[j] = yを使用することです。 yj-1で正しく定義しましたが、list[j-1]をもう一方のxに変更する必要があります。もう一つの問題は、あなたがリストの始めから最後まで行くことです。リストの半分以上に達すると、あなたはあなたの仕事を元に戻します。また、-iを使用できるので、len(list)-iを使用する必要はありません。ここで更新されたコードです:

def reverse(seq): 
    """Reverses elements of a list.""" 
    for i in range(len(seq)//2): 
     x = seq[i] 
     y = seq[-i-1] 
     seq[i] = y 
     seq[-i-1] = x 

l = ['a', 'b', 'c', 'd', 'e'] 
reverse(l) 
print(l) 

出力:あなたもxyを定義する必要はありません

['e', 'd', 'c', 'b', 'a'] 

。代わりに、次のようにしてください:

def reverse(seq): 
    """Reverses elements of a list.""" 
    for i in range(len(list)//2): 
     seq[i], seq[-i-1] = seq[-i-1], seq[i] 

名前を変更しました。おそらくseqよりも優れた名前がありますが、listは組み込み型と競合するため使用できません。

+0

リストを使用しないでください、それはビルトインです。 –

+0

@NamitSingal:あなたは絶対に正しいです。私はそれを変更することを忘れましたが、今変更されました。 – zondo

+2

@NamitSingal:Pedantic:ビルトインですが、キーワードではありません。それがキーワードだったら、それを使うことはできません。 – ShadowRanger

-1

このコードを使用します。

l = ['a', 'b', 'c', 'd', 'e'] 
l=l[::-1] 
print(l) 

あなたはこの単純な構造を複雑にするのはなぜ?それともたいがそのようにこれをしない場合は、使用しよう:

l.reverse() 

機能。 Pythonには、すぐに使える機能がたくさんあります。

+5

他のコメントを読む。 'l.reverse()'は別の質問に対する正解です。誰もコードを書いておらず、どれくらいのエラーがあるかを知っている人はいません。それは割り当てでなければならない。 – Amadan

0

宿題私は疑問...

しかし、私たちはすべて宿題からの休憩が必要です。リスト全体をループすることで、それを2回反転します。あなたはカップルの問題を抱えている

['e', 'd', 'c', 'b', 'a'] 
関連する問題