我有一個串列串列,我想學習如何按索引 1 處的元素對串列進行排序,但如果索引 1 為兩個專案回傳相同的數字,則還按索引 2 處的元素排序。
我想在不使用內置函式和方法的情況下做到這一點,這樣我就可以繼續發展我對串列以及如何操作它們的理解。
回顧一下:
- 我有一個串列串列
- 每個子串列具有相同數量的元素
- 我試圖通過創建一個新的未排序串列來按降序對它們進行排序,該串列是原始串列的副本(我不想修改原始未排序串列)并回圈遍歷未排序串列的副本以獲取最高數字in(從索引 1 開始),然后將其附加到新創建的 sorted_lists 變數
- 然后我從原始未排序串列中洗掉該串列
- 我重復這個程序,直到將剩余的具有最高值的串列一一添加到新的排序串列中并從原始串列中洗掉
我嘗試了一些不同的東西,但無法讓它發揮作用。任何幫助,將不勝感激。
# initialising list
food_list = (
["banana", 10, "f", "yellow"],
["apple", 12, "f", "red"],
["pear", 60, "f", "green"],
["mango", 5, "f", "yellow"],
["lettuce", 3, "v", "green"],
["beans", 20, "v", "green"],
["red capsicum", 1, "v", "red"],
["corn", 20, "v", "yellow"],
)
unsorted_food_list_copy = food_list
sorted_food_list = []
while len(unsorted_food_list_copy) != 0:
maximum = 0
for food in unsorted_food_list_copy:
if food[1] > maximum:
maximum = food[1]
sorted_food_list.append(maximum)
unsorted_food_list_copy.remove(maximum)
我也試過這個:
# initialising list
food_list = (
["banana", 10, "f", "yellow"],
["apple", 12, "f", "red"],
["pear", 60, "f", "green"],
["mango", 5, "f", "yellow"],
["lettuce", 3, "v", "green"],
["beans", 20, "v", "green"],
["red capsicum", 1, "v", "red"],
["corn", 20, "v", "yellow"],
)
unsorted_food_list_copy = food_list
sorted_food_list = []
while unsorted_food_list_copy:
min = unsorted_food_list_copy[1]
for x in unsorted_food_list_copy:
if x < min:
min = x
sorted_food_list.append(min)
unsorted_food_list_copy.remove(min)
uj5u.com熱心網友回復:
在您的代碼示例中,您定義food_list為一段tuple時間提及串列串列。為了使用洗掉、復制或附加等串列功能,您需要在串列周圍添加括號。
首先,你food_list應該這樣定義:
food_list = [
['banana', 10, 'f', 'yellow'],
['apple', 12, 'f', 'red'],
['pear', 60, 'f', 'green'],
['mango', 5, 'f', 'yellow'],
['lettuce', 3, 'v', 'green'],
['beans', 20, 'v', 'green'],
['red capsicum', 1, 'v', 'red'],
['corn', 20, 'v', 'yellow'],
]
其次,在迭代串列之前設定最小值,考慮串列的第一個元素以便開始尋找較低的整數。
minValue = unsorted_food_list_copy[0]
完整的解決方案:
# initializing list
food_list = [
['banana', 10, 'f', 'yellow'],
['apple', 12, 'f', 'red'],
['pear', 60, 'f', 'green'],
['mango', 5, 'f', 'yellow'],
['lettuce', 3, 'v', 'green'],
['beans', 20, 'v', 'green'],
['red capsicum', 1, 'v', 'red'],
['corn', 20, 'v', 'yellow'],
]
unsorted_food_list_copy = food_list.copy()
sorted_food_list = []
for i in range(len(unsorted_food_list_copy)):
minValue = unsorted_food_list_copy[0]
for x in unsorted_food_list_copy:
if x[1] < minValue[1]:
minValue = x
sorted_food_list.append(minValue)
unsorted_food_list_copy.remove(minValue)
sorted_food_list_descending = sorted_food_list[::-1]
print(sorted_food_list_descending)
# Ouput
[['pear', 60, 'f', 'green'],
['corn', 20, 'v', 'yellow'],
['beans', 20, 'v', 'green'],
['apple', 12, 'f', 'red'],
['banana', 10, 'f', 'yellow'],
['mango', 5, 'f', 'yellow'],
['lettuce', 3, 'v', 'green'],
['red capsicum', 1, 'v', 'red']]
uj5u.com熱心網友回復:
要按降序執行此操作,您可以執行以下操作:
food_list = [
['banana', 10, 'f', 'yellow'],
['apple', 12, 'f', 'red'],
['pear', 60, 'f', 'green'],
['mango', 5, 'f', 'yellow'],
['lettuce', 3, 'v', 'green'],
['beans', 20, 'v', 'green'],
['red capsicum', 1, 'v', 'red'],
['corn', 20, 'w', 'yellow'],
]
food_list_copy = food_list.copy()
new_list = []
while food_list_copy:
hi = food_list_copy[0]
pi = 0
for i, e in enumerate(food_list_copy[1:], 1):
if e[1] > hi[1]:
hi = e
pi = i
elif e[1] == hi[1]:
if e[2] > hi[2]:
hi = e
pi = i
new_list.append(hi)
food_list_copy.pop(pi)
print(new_list)
輸出:
[['pear', 60, 'f', 'green'],
['corn', 20, 'w', 'yellow'],
['beans', 20, 'v', 'green'],
['apple', 12, 'f', 'red'],
['banana', 10, 'f', 'yellow'],
['mango', 5, 'f', 'yellow'],
['lettuce', 3, 'v', 'green'],
['red capsicum', 1, 'v', 'red']]
uj5u.com熱心網友回復:
根據指定(用戶定義)鍵對串列進行排序的 Pythonic 方法是sort與key引數一起使用。
food_list = [
["banana", 10, "f", "yellow"],
["apple", 12, "f", "red"],
["pear", 60, "f", "green"],
["mango", 5, "f", "yellow"],
["lettuce", 3, "v", "green"],
["beans", 20, "v", "green"],
["red capsicum", 1, "v", "red"],
["corn", 20, "w", "yellow"],
]
# create a copy (you can also use `copy.deepcopy`) and sort
sorted_food_list = [list(i) for i in food_list]
sorted_food_list.sort(key=lambda i: (-i[1], i[2]))
輸出
[['pear', 60, 'f', 'green'],
['beans', 20, 'v', 'green'],
['corn', 20, 'w', 'yellow'],
['apple', 12, 'f', 'red'],
['banana', 10, 'f', 'yellow'],
['mango', 5, 'f', 'yellow'],
['lettuce', 3, 'v', 'green'],
['red capsicum', 1, 'v', 'red']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441066.html
標籤:Python python-3.x 排序 嵌套列表
上一篇:根據地圖中的值對串列進行排序
