如何在多列表结构中查找各列的最小值与最大值?
如何找出二维列表每一列的最大值和最小值?
当然可以用min()和max()函数轻松实现这个需求!你的代码已经生成了包含5行3列数据的二维列表list2,现在只需要把列数据转换成行数据,就能直接用这两个函数计算每一列的最值了。
先来看你原来的代码(做了格式优化):
import random list1 = [] list2 = [] for i in range(5): for j in range(3): list1.append(random.randrange(1,101)) list2.append(list1) list1=[] for i in list2: for j in i: print(j, end=",") print(" (Sum: ", sum(i), " Average: ", (sum(i)/len(i)), ")", sep="") print()
接下来我们添加列最值的计算逻辑,直接看修改后的完整代码:
修改后的可运行代码
import random list1 = [] list2 = [] for i in range(5): for j in range(3): list1.append(random.randrange(1,101)) list2.append(list1) list1=[] # 打印每行的内容、总和与平均值 for i in list2: for j in i: print(j, end=",") print(" (Sum: ", sum(i), " Average: ", (sum(i)/len(i)), ")", sep="") # 核心:转置二维列表,把列数据转为行数据 columns = list(zip(*list2)) # 遍历每一列,输出最值 for idx, col in enumerate(columns, start=1): # 根据列序号调整后缀(1st/2nd/3rd),让输出更贴合你的预期 suffix = "st" if idx ==1 else "nd" if idx ==2 else "rd" print(f"Largest number of {idx}{suffix} column: {max(col)}") print(f"Smallest number of {idx}{suffix} column: {min(col)}")
关键逻辑说明
zip(*list2)的妙用:*list2会把二维列表拆分成独立的行列表,zip()会将这些行中对应位置的元素打包成元组,实现列转置。比如原列表是[[a1,a2,a3], [b1,b2,b3], ...],转置后变成[(a1,b1,...), (a2,b2,...), (a3,b3,...)],每个元组就是一列的全部数据。- 直接调用
min()/max():转置后的每个元组就是一列数据,直接对元组调用这两个函数,就能快速得到对应列的最小、最大值,完全不需要额外的循环判断。
运行这段代码后,就能输出你预期的包含每行统计、每列最值的结果啦!
内容的提问来源于stack exchange,提问作者Chan Kim
相关产品推荐
相关产品推荐

