![](/img/trans.png)
[英]Python Generator: How do I generate pairs from two different lists based on user input (of how many pairs to print)
[英]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
這是一個具有最小范圍的大小。 結果是具有大小和索引的元組。 index
是smallest
元組的第二部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.