删除列表中与另一个列表中的最大值不对应的项目
Posted
技术标签:
【中文标题】删除列表中与另一个列表中的最大值不对应的项目【英文标题】:Removing items in list not corresponding to max value in another list 【发布时间】:2018-05-18 06:15:49 【问题描述】:model_names = ['is1', 'is5', 'is10', 'im1', 'im5', 'im10']
举个例子,
models = [0.1, 0.2, 0.1, 0.3, 0.2, 0.3]
列表的最大值为 0.3,对应于模型名称“im1”和“im10”。我想要这个功能
dominant_model(models)
返回
['im1', 'im10']
即最“占主导地位”的模型。
这是我完成这项工作的代码,但我想知道是否有更短的方法来做同样的事情而不是所有的条件:
def dominant_model(models):
m = max(models)
dom_models = [i for i,j in enumerate(models) if j==m]
for i in range(len(dom_models)):
if dom_models[i]==0:
dom_models[i]=model_names[0]
elif dom_models[i]==1:
dom_models[i]=model_names[1]
elif dom_models[i]==2:
dom_models[i]=model_names[2]
elif dom_models[i]==3:
dom_models[i]=model_names[3]
elif dom_models[i]==4:
dom_models[i]=model_names[4]
elif dom_models[i]==5:
dom_models[i]=model_names[5]
return dom_models
【问题讨论】:
【参考方案1】:找到最大值m = max(model)
后,将模型名称压缩到值中,取值等于m
的名称。
def dominant(names, values):
m = max(values)
return [name for name, value in zip(names, values) if value == m]
演示
>>> model_names = ['is1', 'is5', 'is10', 'im1', 'im5', 'im10']
>>> model_values = [0.1, 0.2, 0.1, 0.3, 0.2, 0.3]
>>> dominant(model_names, model_values)
['im1', 'im10']
【讨论】:
这真的很优雅【参考方案2】:使用两个循环:
def dominant_model(models):
m = max(models)
dom_models = [i for i,j in enumerate(models) if j==m]
for i in range(len(dom_models)):
for j in range(6):
if dom_models[i]==j:
dom_models[i]=model_names[j]
return dom_models
【讨论】:
以上是关于删除列表中与另一个列表中的最大值不对应的项目的主要内容,如果未能解决你的问题,请参考以下文章