2017-06-08 11 views
0

iは配列の要素をソートするために、このコードを書くのうちインデックスが、 に、このエラーを ライン9を取得IAM IF([I]> [J]): はIndexError :リストインデックスが範囲外です 配列要素をソートするための同じロジックがjavaまたはcで正しく機能します。 これがなぜpythonで起こっているのかを知るのを手伝ってください。 はPythonの構文に起因するか、別の本であるはIndexError:リスト範囲パイソンソーティングアレイ

from array import * 
a=[] 
n=int(input("enter number of elements:")) 
for i in range(0,n): 
    b=input("enter element") 
    a.append(b) 
for i in range(0,n): 
    for j in range(i+1,n): 
     if(a[i]>a[j]): 
      temp=a[i] 
      a[i]=a[j] 
      a[j]=temp 
print("sorted") 
for i in range(0,n-1): 
    print(a[i]) 
    print(a[n-1]) 
+1

リストのソート方法を使用してリストをソートします。 list.sort()は、リストをソートします。またはsorted(list)は、元の影響を受けていないリストのソートされたバージョンを返します。 –

+0

アウターforループのシグネチャーを修正する:for i in range(0、n - 1) –

+1

インデントを修正してください。 Pythonの空白が問題となる可能性がありますが、コードが正しくフォーマットされていないかどうかを判断する方法はありません。 – congusbongus

答えて

1

最初のリストのソート方法を記述する必要はありません自分のpythonあなたのためにそれを行います。およびb

a=[1,5,4,7,8,3,5,4] 
for i in range(len(a)): 
    for j in range(i+1,len(a)): 
     if a[i]>a[j]: 
      a[i],a[j]=a[j],a[i] 

print(a) 

上記のコードが昇順にソートを動作の間に第二単にPythonで二つの可変の値を交換する第3の一時変数の必要なく、B = B、値を交換します。降順で を変更すると、>が<に変更されます。 組み込みのリストソートメソッドとソート済みの関数を使用してリストをソートする方が良いです。

+0

感謝@Bibek Ghimire – Infinity

0
ここ

があなたの現在のコードにいくつかの改善です:

a =[] 
n = int(input("enter number of elements: ")) 

for i in range(0, n): 
    b=input("enter element: ") 
    a.append(b) 
# You can also, use: 
# for i in range(len(a)) 
for i in range(0, n): 
    # Same: 
    # for j in range(i+1, len(a)) 
    for j in range(i+1, n): 
     # Be aware: 
     # if the data passed to the list a cannot be converted 
     # into an integer, this code will throw a ValueError exception 
     if int(a[i]) > int(a[j]): 
      # You don't need to create a 'temp' variable 
      # Python can handle it dynamically 
      a[i], a[j] = a[j], a[i] 

      print("Sorted") 
      print(" ".join(a)) 

デモ:

enter number of elements: 4 
enter element: 5 
enter element: 1 
enter element: 4 
enter element: 3 
Sorted 
1 5 4 3 
Sorted 
1 4 5 3 
Sorted 
1 3 5 4 
Sorted 
1 3 4 5 

PS:私はあなたの中で、内蔵sorted()、またはlist.sort()のPythonを使用することをお勧めします-place list sorting

+0

ありがとう@Chiheb Nexus私はint型の配列を作成したinbuilt関数を使用せずにユーザが入力した配列をソートする割り当てを持っています.iはPython配列がまだ存在するか完全にリストに置き換えられているか疑いがあります。もう一つの助けとなるのは、Pythonでコードを理解するには、どのブロックも含まれておらず、スペースが問題になるだけなので、コードの特定のブロックが終了し、別のブロックが開始された場所を見つけるのが難しい場合があります。 – Infinity

+0

@Infinityは、Pythonがコードのブロックを分離するために識別子を使用しているので、ブロックの開始位置と終了位置をPythonで頻繁に調べる必要があります。識別情報を使用すると、コードをよりエレガントで使いやすくすることができます。個人的には、私はこのコンセプトが好きです。 –

関連する問題