題目內容
輸入一個列表,要求列表中的每個元素都爲整數;
將列表中的所有元素按照它們的絕對值大小進行排序,絕對值相同的還保持原來的相對位置,打印排序後的列表(絕對值大小僅作爲排序依據,打印出的列表中元素仍爲原列表中的元素)。
可以使用以下實現列表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)