Python中如何根据元组内元素乘积对列表中的元组进行排序
按元组元素乘积排序的实现方案
你当前编写的是标准选择排序逻辑,默认直接比较元组本身(Python会按元组元素顺序依次比较大小),不符合按元组内部元素乘积排序的需求,只需调整比较判断的逻辑即可。
修改后的完整代码
def sort_list (a): i = 0 while i < len(a): key = i j = i + 1 while j < len(a): # 替换为计算元组乘积后比较 if (a[key][0] * a[key][1]) > (a[j][0] * a[j][1]): key = j j += 1 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) # 输出:[(1, 1.0), (3, 1.0), (2, 3.0), (4, 2.5)]
补充说明
- 如果需要适配任意长度的元组场景,可使用
math.prod()计算元组乘积(Python3.8及以上版本支持),将比较逻辑替换为if math.prod(a[key]) > math.prod(a[j]):即可 - 如果无需自行实现排序算法,可直接调用Python内置
sorted函数简化实现,代码如下:
m = [(2, 3.0), (3, 1.0), (4, 2.5), (1, 1.0)] # 按元组元素乘积升序排序 m_sorted = sorted(m, key=lambda x: x[0] * x[1]) print(m_sorted)
内容的提问来源于stack exchange,提问作者Janys02
相关产品推荐
相关产品推荐

