簡體   English   中英

如何根據輸入的用戶輸入基於兩個列表打印范圍?

[英]How to print a range based on two lists, from the user input entered?

基本上,我想編寫一個基於兩個列表的python程序,例如:

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

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

用戶輸入輸入並根據輸入,程序根據輸入和位置打印出范圍。 每個索引對應一個工作和范圍。 因此,minsalary中的索引(位置)0和maxsalary中的索引0都是對應於作業0的范圍。因此,索引0處的22000到35000本身就是一個作業。

它基於最高工資,每個范圍對應一個指數(或工作崗位)
因此,如果用戶輸入30000,程序將根據位置0(索引)打印最佳范圍22000到35000。

使用帶key內置min

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

這將在不混合不同索引的最小/最大值(例如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這是一個具有最小范圍的大小。 結果是具有大小和索引的元組。
  • 最符合條件的范圍的indexsmallest元組的第二部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM