如何获取在另一个列表中具有值的列表的最大值
Posted
技术标签:
【中文标题】如何获取在另一个列表中具有值的列表的最大值【英文标题】:How to get the max value of list that have value in another list 【发布时间】:2022-01-05 12:02:56 【问题描述】:我有两个列表
-
task=[1,1,1,1,2,2,3,4,5,5]
小时=[1,7,6,2,3,6,5,2,4,6]
-.我想要求用户输入一个介于 1 到 5 之间的数字,然后在列表任务中查看用户对更相似值的输入(如果用户输入 1,那么我需要打印小时列表中前四个索引的最大值(因为数字 1 在列表任务中有 4 个索引))所以输出将是“任务号(输入)可以在(前四个索引的最大小时数)小时内完成)
【问题讨论】:
【参考方案1】:n = int(input("Pick a valid number between 1 and 5: "))
result = max(hours[:len(task) - 1 - task.index(n)])
print("Task number 0 can be completed in 1 hours".format(n, result))
所有这些都是获取用户的输入,然后在task
中找到数字的最后一个索引,然后从hours
中获取前n 个元素的最大值。最后,它打印格式化的结果。
【讨论】:
这不正确,试试 n=5【参考方案2】:您可以使用zip
循环遍历这些对,并且您可以在任务编号与输入内容匹配的情况下占用最大的任务小时数。
task = [1,1,1,1,2,2,3,4,5,5]
hours = [1,7,6,2,3,6,5,2,4,6]
num = int(input('Which task number?'))
print(max(h for n,h in zip(task, hours) if n == num))
【讨论】:
如果流程只需要应用一次,这是一个很好的解决方案。如果要处理多个任务,您必须重新阅读整个内容,从而浪费效率。 @mozway 是的。如果列表大到足以关心这一点,那么可以建立一本字典。我可能倾向于制作一个只包含每个任务编号的最大长度的字典。 (也可以为每个任务编号创建一个包含单个项目列表的字典,并在需要时计算其中的最大值,但这可能需要更多的内存,具体取决于每个任务编号的平均任务数。) @mozway 本质上是mydict = defaultdict(int)
,然后循环执行for n,h in zip(task, hours): mydict[n] = max(mydict[n], h)
I know:p【参考方案3】:
使用不同类型的容器,字典更合适。以下是如何从您的格式转换:
from collections import defaultdict
d = defaultdict(list)
for k,v in zip(task,hours):
d[k].append(v)
输出:
>>> dict(d)
1: [1, 7, 6, 2], 2: [3, 6], 3: [5], 4: [2], 5: [4, 6]
然后你可以选择任务并获得最大值:
n = 1
max(d[n])
输出:7
【讨论】:
【参考方案4】:你也可以使用numpy
来做。
i = int(input("Pick a valid number between 1 and 5: "))
arr = np.array([task, hours])
max_hours_of_task_i = arr[1,arr[0]==i].max()
【讨论】:
以上是关于如何获取在另一个列表中具有值的列表的最大值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PANDAS 获取具有 NAN 值的列名并将这些列名存储在列表中? [复制]