我有一個 Python 串列,我想根據兩個類別進行排序。排序后的串列應該在最后一個位置具有最小的數字,并且第一個元素必須大于 400。我想從串列中回傳前 3 個。
x_list = [['422', '324', '733443'], ['342', '654', '674335'],
['953', '456', '828854'], ['345', '886', '446678'],
['3224', '533', '654333'], ['7545', '5567', '369990']]
它應該像這樣回傳:
result = [['7545', '5567', '369990'], ['3224', '533', '654333'], ['422', '324', '733443']]
我嘗試使用以下代碼,但無法結合這兩個條件對串列進行排序:
result= []
result = sorted(x_list, key=lambda x: int(x[-1]))[:3]
誰能幫我解決這個問題?非常感謝!!
uj5u.com熱心網友回復:
考慮這段代碼:
filter_first = [el for el in x_list if int(el[0]) > 400]
sorted(filter_first, key=lambda el: el[-1])
這給了我
[['7545', '5567', '369990'], ['3224', '533', '654333'], ['422', '324', '733443'], ['953', '456', '828854']]
這與您聲稱希望輸出的結果不同,但我認為它符合您宣告的所有要求。你能解釋一下'953'子串列嗎?
uj5u.com熱心網友回復:
我將首先過濾串列以僅保留第一個元素大于 400 的值,然后按照您最初的方式根據最后一個元素按升序對最終結果進行排序。例如:
x_list = [['422', '324', '733443'], ['342', '654', '674335'],
['953', '456', '828854'], ['345', '886', '446678'],
['3224', '533', '654333'], ['7545', '5567', '369990']]
x_list2 = [x for x in x_list if int(x[0]) > 400]
x_list2.sort(key=lambda x: int(x[2]))
x_list2 = x_list2[:3]
print(x_list2)
# [['7545', '5567', '369990'], ['3224', '533', '654333'], ['422', '324', '733443']]
或者您也可以在一個步驟中進行排序和過濾:
x_list = [['422', '324', '733443'], ['342', '654', '674335'],
['953', '456', '828854'], ['345', '886', '446678'],
['3224', '533', '654333'], ['7545', '5567', '369990']]
x_list2 = sorted((x for x in x_list if int(x[0]) > 400), key=lambda x: int(x[2]))[:3]
print(x_list2)
# [['7545', '5567', '369990'], ['3224', '533', '654333'], ['422', '324', '733443']]
uj5u.com熱心網友回復:
這是一個可自定義的功能:
def sort_filtered(list_, key=lambda x: x[2], filter_=lambda x: x[0] > 400, n=3):
# Turn values into floats so we can sort them
float_list = [[float(x) for x in y] for y in list_]
return [x for x in sorted(float_list, key=key) if filter_][:n]
uj5u.com熱心網友回復:
x_list = [['422', '324', '733443'], ['342', '654', '674335'],
['953', '456', '828854'], ['345', '886', '446678'],
['3224', '533', '654333'], ['7545', '5567', '369990']]
x_list = [a for a in x_list if float(a[0]) > 400] # Filters out values <= 400
x_list.sort(key=lambda x : x[2]) # Sorts by the last element
x_list = x_list[:3] # Only keeps the first 3 values
print(x_list)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485226.html
上一篇:如何對txt中的資料進行排序?
下一篇:根據偏好和閾值輸出數字串列
