所以基本上,我想编写一个基于两个列表的python程序,例如:
minsalary = [22000,41000,10000,51500,13000]
maxsalary = [35000,95000,34000,65000,31000]
用户输入一个输入,然后根据输入,程序根据输入AND位置打印出范围。每个索引对应一个工作和范围。因此,在喉部的索引(位置)0和在喉部的索引0都是与作业0对应的范围。因此,从22000到35000的索引0本身就是作业。
它基于最高薪水,每个范围对应一个索引(或工作职位)
因此,如果用户输入30000,程序将根据位置0(索引)打印最佳范围为22000至35000。
答案 0 :(得分:0)
将内置min
与key
一起使用:
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)))
输出:
ranger(13000)
# Best range is 13000 to 31000, use position 4
答案 1 :(得分:0)
这将不会混淆不同索引(例如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}')
以下是细分版本,可以更好地隔离每个步骤:
ranges = zip(minsalary,maxsalary) # [ (min,max), (min,max), ... ]
indexedRanges = enumerate(ranges) # [ (0,(min,max)), (1,(min,max)) ... ]
eligibleIndexes = [ (b-a,i) for i,(a,b) in indexedRanges if salary>=a and salary <= b ] # [ (size,2), (size,4) ]
smallest = min(eligibleIndexes) # (size,4)
index = smallest[1]
print(f'Best range is {minsalary[index]} to {maxsalary[index]}, use position {index}')
ranges
变量将两个数组转换为元组数组,其薪水在(最小,最大)范围内。indexedRanges
变量将索引(位置)添加到范围元组eligibleIndexes
过滤器indexedRanges
仅保留薪水在范围内的项目,并返回范围大小和相应的索引smallest
变量接收eligibleIndexes
的最小条目,该条目的范围大小最小。结果是一个具有大小和索引的元组。index
是smallest
元组的第二部分。