如何根据用户输入的两个列表打印一个范围?

2024-09-23 22:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我想写一个基于两个列表的python程序,例如:

minsalary = [22000,41000,10000,51500,13000]

maxsalary = [35000,95000,34000,65000,31000] 

用户输入一个输入,根据输入,程序根据输入和位置打印出范围。每个索引对应于一个作业和一个范围。所以minsalary中的index(position)0和maxsalary中的index 0都是对应于作业0的范围。所以从22000到35000指数0本身就是一项工作。在

基于最高工资,每个范围对应一个指标(或职位)
因此,如果用户输入30000,程序将根据位置0(索引)打印22000到35000的最佳范围。在


Tags: 用户程序列表index作业职位position指数
2条回答

将内置的minkey一起使用:

minsalary = [22000,41000,10000,51500,13000]

maxsalary = [35000,95000,34000,65000,31000] 

def ranger(user_input):
    lower = min(minsalary, key = lambda x: abs(x-user_input))
    upper = min(maxsalary, key = lambda x: abs(x-user_input))
    print('Best range is %s to %s, use position %s' % (lower, upper, maxsalary.index(upper)))

输出:

^{pr2}$

这将在不混淆不同索引的最小/最大值的情况下工作(例如33000):

minsalary = [22000,41000,10000,51500,13000]
maxsalary = [35000,95000,34000,65000,31000]
salary    = 14000
index     = min((b-a,i) for i,(a,b) in enumerate(zip(minsalary,maxsalary)) if salary in range(a,b+1))[1]
print(f'Best range is {minsalary[index]} to {maxsalary[index]}, use position {index}')

下面是一个分解版本,可以更好地隔离每个步骤:

^{pr2}$
  • 变量ranges将这两个数组转换为一个元组数组,其中(minimum,maximu)工资在范围内。在
  • indexedRanges变量将索引(位置)添加到ranges元组中
  • eligibleIndexes过滤器indexedRanges只保留薪资在范围内的项目,并返回范围大小和相应的索引
  • smallest变量接收eligibleIndexes的最小条目,这是范围大小最小的条目。结果是一个具有大小和索引的元组。在
  • 最佳合格范围的indexsmallest元组的第二部分。在

相关问题 更多 >