我試圖撰寫一個程式來根據每個元組的產品價值對串列中的元組進行排序。我只是嘗試先使用 while 回圈對它們進行排序,但我無法整合元組內數字的乘法。我到目前為止的代碼是:
def sort_list (a):
i = 0
while i < len(a):
key = i
j = i 1
#first checking throuh the whole list if any number is bigger
while j < len(a):
if a[key] > a [j]:
key = j
j = 1
#swap the numbers if the key one (i) is bigger than the j one the j one will be the new key
# and swapped in the next section!
a[i], a[key] = a[key], a[i]
i = 1
return a
m = [(2, 3.0), (3, 1.0), (4, 2.5), (1, 1.0)]
sort_list(m)
print (m)
# should output : [(1, 1.0), (3, 1.0), (2, 3.0), (4, 2.5)]
uj5u.com熱心網友回復:
本list類有一個方法,.sort這種種就地,具有key引數指定自定義比較。
list.sort:key指定一個帶一個引數的函式,用于從每個串列元素(例如,key=str.lower)中提取比較鍵。在key對應于串列中的每個專案被計算一次,然后用于整個分類處理。默認值None表示直接對串列項進行排序,無需計算單獨的鍵值。
Python>=3.8
在您的情況下,我們需要計算元組中所有元素的乘積。我們可以使用math.prod1類似于sum.
from math import prod
m = [(2, 3.0), (3, 1.0), (4, 2.5), (1, 1.0)]
m.sort(key=prod)
# list -> [(1, 1.0), (3, 1.0), (2, 3.0), (4, 2.5)]
Online Demo
我曾經math.prod對解決方案進行概括,使您可以靈活地在任意長度可迭代上使用該解決方案。
Python < 3.8
我們可以使用functools.reducewithoperator.mul來概括以使其適用于任意長度的可迭代。下面的代碼也適用于 Python2.7。
from functools import reduce, partial
from operator import mul
prod = partial(reduce, mul)
m.sort(key=prod)
Online Demo
1.math.prod可從python3.8獲得
uj5u.com熱心網友回復:
使用list.sort()或sorted()與key 引數
從 Python 3.8 開始,有一個函式math.prod可以計算元組中專案的乘積。您可以將其用作關鍵引數,如下所示:
import math.prod
m = [(2, 3.0), (3, 1.0), (4, 2.5), (1, 1.0)]
list.sort(m, key=math.prod)
print(m)
在 Python 3.8 之前,您可以使用 lambda(或任何其他函式)完成此操作:
m = [(2, 3.0), (3, 1.0), (4, 2.5), (1, 1.0)]
list.sort(m, key=lambda x: x[0] * x[1])
print(m)
之間的差異list.sort()和排序()是list.sort()代替修改M,這樣你就不必再次將其分配到m。另一方面,如果您使用sorted(),則排序串列將作為新串列回傳,因此您必須為其分配 t m。
uj5u.com熱心網友回復:
list.sort并且sorted兩者都讓您指定一個key引數,該引數應該是一個函式,給出將用于排序的“分數”。在你的情況下,我們只需要讓這個分數成為元組元素的乘積:
sorted(m, key=lambda x: x[0]*x[1])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/352649.html
上一篇:如何組織具有維度的串列
