2017-11-19 3 views
0

文字列を取り、アルファベット順(バブルソート)にソートするプログラムで作業しています。私は私を始めるための簡単なコードを作ったが、シェルで実行した直後に問題を見つけた。 マイコード:Python、Lists error:IndexError:リストのインデックスが範囲外です。

aList = ["b", "a", "d", "c"] 
compOne = 0 
compTwo = 1 
sorting = True 
while sorting == True: 
    print (aList) 
    sortingList = [] 
    sortingList.insert(compOne, aList[compOne]) 
    sortingList.insert(compTwo, aList[compTwo]) 
    aList[compOne] = sorted(sortingList)[compOne] 
    aList[compTwo] = sorted(sortingList)[compTwo] 
    print (aList) 
    print("__________________________") 
    compOne = compOne + 1 
    compTwo = compTwo + 1 

私が持っていたアイデアは、それがアルファベット順になるまで、それは私が持っているとき、これを行うに進みますが、私はまだwhileループを閉じていない(アイテムを交換リストを通過続けるです) この問題を渡してしまった出力は、私がしたい:

['a', 'b', 'd', 'c'] 
__________________________ 
['a', 'b', 'd', 'c'] 
__________________________ 
['a', 'b', 'c', 'd'] 
__________________________ 
ETC(Will repeat because i haven't closed the while loop) 

私はエラーと仲良く出力:

['a', 'b', 'd', 'c'] 
__________________________ 
Traceback (most recent call last): 
    File "C:/Users/MyName/Desktop/Python Programs/Projects/Bubble Sort/Test File 4.py", line 10, in <module> 
    aList[compTwo] = sorted(sortingList)[compTwo] 
IndexError: list index out of range 

あなたはそれを言うことができるように比較する項目の2番目のセットに来て、このエラーに遭遇しました。何らかの理由で aList[compOne] = sorted(sortingList)[compOne]は大丈夫だったが、示唆している(彼らは似たコードです)

私は1時間半のために、この問題を調査してきたと私は、解決策を見つけていないではないaList[compTwo] = sorted(sortingList)[compTwo]たあなたは私の問題を伝えることができればなぜこのことが起こったのかを深く説明してください(私は答えがほしいというだけではなく、私が間違ったことを説明したい)一方で、私は答えと説明を待っています。ありがとう。両方に1

あなたadd 10

CompTwo開始で

答えて

0

CompOne開始のすべての時間を(のpython 3.6.1で書かれた) - CompOneが(結構です)、文字列の最後の文字を住所がするまでCompTwoの文字にの最後の文字 - >Indexerrorの後にアクセスしようとします。

私は私はあなたがしようとするものを正確に把握した場合、最も私をboggles何わからない午前:

  • あなたは空のリストにすべてのwhileループのラウンドであなたのsortingListを再インスタンス?それぞれの
  • あなたが入れたループは、あなたのsortingListが二度(ソート(.....))ソートされ
  • いくつかの指標であなたの配列にnと「N + 1」char型ながら、かなりunnessecaryである二回新しいリストを作成します - あなたはそれを一度ソートして、それを一時変数に格納することができます。なぜ、あなたはここにインデックスを持つ.insertを使用しない、リストはあなたがあなたの入力配列の長さに耳を傾ける必要がある

CompTwoを超えることはできません前に起因するsortedList=[]数行に、あなたがそれに入れて2つの文字の横にある空でありますそれ。

+0

ありがとうございました、あなたは私が持っていた問題に答えました。私はあなたが何を意味するのか知りたいのですが、私は変数を2回ソートしました。私はコードを良く見て、2回ソートしたものは見えませんでした。ソートされるのは唯一の時間です: 'aList [compOne] =ソート済み(sortingList)[compOne] aList [compTwo] =ソート済み(sortingList)[compTwo]'は別々にソートされます。 –

+0

いいえ - 'sorted(sortingList)'はリスト全体をソートし、新しいものの上に新しいものをコピーします(それはインプレースでソートされません)。そして追加された '[compOne]'はこのリストのn番目の要素を使用します。同じことをもう一度やって、n + 1番目の要素にアクセスしてもう1つのコピー&ソートされたリストにアクセスします。 https://docs.python.org/3.6/library/functions.html#sorted:o)を参照してください。 –

関連する問題