文字列を取り、アルファベット順(バブルソート)にソートするプログラムで作業しています。私は私を始めるための簡単なコードを作ったが、シェルで実行した直後に問題を見つけた。 マイコード: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 1
で0
CompTwo
開始で
ありがとうございました、あなたは私が持っていた問題に答えました。私はあなたが何を意味するのか知りたいのですが、私は変数を2回ソートしました。私はコードを良く見て、2回ソートしたものは見えませんでした。ソートされるのは唯一の時間です: 'aList [compOne] =ソート済み(sortingList)[compOne] aList [compTwo] =ソート済み(sortingList)[compTwo]'は別々にソートされます。 –
いいえ - 'sorted(sortingList)'はリスト全体をソートし、新しいものの上に新しいものをコピーします(それはインプレースでソートされません)。そして追加された '[compOne]'はこのリストのn番目の要素を使用します。同じことをもう一度やって、n + 1番目の要素にアクセスしてもう1つのコピー&ソートされたリストにアクセスします。 https://docs.python.org/3.6/library/functions.html#sorted:o)を参照してください。 –