簡體   English   中英

IndexError:列表索引超出范圍python排序數組

[英]IndexError: list index out of range python sorting array

我編寫此代碼來對數組的元素進行排序,但是我在if(a [i]> a [j])中得到了此錯誤行9,IndexError:列表索引超出范圍用於對數組元素進行排序的相同邏輯與java一起工作或c正確。 幫助我找到為什么這在python中發生。 這是由於python語法還是其他原因

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])

首先,您不需要自己編寫列表排序方法,而python會為您完成。 第二個不需要第三個臨時變量在python中的兩個變量之間交換值,只需a,b = b,a將在a和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)

上面的代碼按升序排序。 對於降序,將>更改為<。 最好使用內置列表排序方法和sorted函數對任何列表進行排序。

這是您當前代碼的一些改進:

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:我建議您使用Python內置的sorted()list.sort() ,它是就地列表排序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM