Python循环中如何获取每个R0对应的k最小值及对应m值?
Python代码修改:计算R0元素与m列表的比值最小值及对应m值
需求说明
针对R0数组中的每个元素i,计算k=i/j(j取自m列表)的最小值,并找到该最小值对应的m值,现有代码无法输出期望结果,需修改代码实现目标。
当前代码
import numpy as np R0=np.arange(1, 2, 0.9) m=[3, 7.01559, 50, 13.3237, 16.4706] for i in R0: for j in m: k=i/j print('%.5f' % k) print("The minimum number for R0 =",i,"is","and is minimum at m=") print('\n')
期望输出
0.33333 0.14254 0.02000 0.07505 0.06071 The minimum number for R0=1 is 0.02000 and is minimum at m=50 0.63333 0.27083 0.03800 0.14260 0.11536 The minimum wave number for R0 =1.9 is 0.03800 and is minimum at m=50
修改后的代码
import numpy as np R0 = np.arange(1, 2, 0.9) m = [3, 7.01559, 50, 13.3237, 16.4706] for i in R0: k_j_pairs = [] for j in m: k = i / j k_formatted = '{0:.5f}'.format(k) print(k_formatted) k_j_pairs.append((k, j)) # 找到k最小的对应组 min_k, min_m = min(k_j_pairs, key=lambda x: x[0]) # 处理浮点数精度问题,确保R0显示为1或1.9 r0_display = round(i, 1) print(f"The minimum number for R0={r0_display} is {min_k:.5f} and is minimum at m={min_m}\n")
修改说明
- 新增
k_j_pairs列表,存储每个j对应的(k, j)键值对,为后续查找最小值提供数据基础 - 使用
min()函数结合lambda表达式,直接根据k的值筛选出最小的那一组数据 - 用
round(i, 1)处理R0中浮点数的精度问题,避免出现1.8999999999999999这类不符合期望的显示 - 采用f-string格式化输出语句,确保输出格式与期望完全匹配
内容的提问来源于stack exchange,提问作者Math_student
相关产品推荐
相关产品推荐

