Python 列表元素絕對值排序

題目內容

輸入一個列表,要求列表中的每個元素都爲整數;

將列表中的所有元素按照它們的絕對值大小進行排序,絕對值相同的還保持原來的相對位置,打印排序後的列表(絕對值大小僅作爲排序依據,打印出的列表中元素仍爲原列表中的元素)。

可以使用以下實現列表alist的輸入:

alist=list(map(int,input().split()))

輸入格式:

共一行,列表中的元素值,以空格隔開。

 

輸出格式:

共一行,爲一個列表。

 

輸入樣例:

-2 1 3

 

輸出樣例:

[1, -2, 3]

時間限制:500ms內存限制:32000kb

分析

   1  起初使用選擇排序進行測試,用例測試第三組數據的時候卡住了,提示排序錯誤,可以用sort方法來排序,並設定該方法的key參數。

   2  在選擇用sort進行排序時,通過查閱資料,瞭解了一些關於sort以及sorted的一些知識點。

  sort() 函數用於對原列表進行排序,如果指定參數,則使用比較函數指定的比較函數。

  sort語法

          list.sor(key=None(進行比較的元素), reverse(排序規則)=False(升序,True降序) )

  sorted語法

           sorted(iterable(可迭代對象,即列表), key=None(進行比較的元素), reverse=False(升序,默認值))

sort與sorted區別

  sort 是應用在 list 上的方法,sorted 可以對所有可迭代的對象進行排序操作。

   list 的 sort 方法返回的是對已經存在的列表進行操作,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作。

具體思路

   首先想到的是構成一個二維列表,第一列表示初始數據,第二列表示絕對值數據。 再對二維列表中的第二列表絕對值數據用sorted進行排序,輸出第一列初始數據所在的列表

  下面給出sort以及sorted的解決方法

alist = list(map(int,input().split()))
blist = []
n = len(alist)

for i in range (n):
    blist.append(abs(alist[i]))  #取絕對值組成一維列表
newlist = list(zip(alist,blist)) #zip可以將兩個一維列表合併成二維列表,下標從0開始,相同下標的相組合
#關於sorted的用法
clist = sorted(newlist,key = lambda x:x[1]) #lambda函數用於指定對列表中所有元素進行排序的準則
dlist = [i[0] for i in clist]  #從clist(二維列表)中的每一行取第一個
print(dlist)

#關於sort的用法

# 獲取列表的第二個元素
#def takeSecond(elem):
    return elem[1]
#newlist.sort(key = takeSecond)

#dlist = [i[0] for i in newlist]  #從newlist(二維列表)中的每一行取第一個
#print(dlist)

  偶然看見一位大神直接對一維列表alist進行sorted排序,key = abs,以下是大神連接

    https://blog.csdn.net/suxiaorui/article/details/85160457

 其實也可以用sort排序,三行代碼解決

alist = list(map(int,input().split()))
alist.sort(key = abs)
print(alist)

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章