【问题标题】:How do you choose a value in conditional statement randomly?如何随机选择条件语句中的值?
【发布时间】:2020-09-25 11:49:48
【问题描述】:

以下是一个例子:

p_dur_same = [0, 5, 5]
activity = [2, 3, 4]
max_p_dur_same = max(p_dur_same)

我要做的就是在p_dur_same中选择最高的值,然后得到它的索引,用这个索引找到它对应的活动号。

我的代码中有一个条件部分,如下所示:

    # if same duration, randomly choose between the activities in activity 
    if p_dur_same.count(max_p_dur_same) > 1:
       select_act =
       p_dur_select_act =
    else:
    # if different, select the activity that has the highest duration
       select_act =
       p_dur_select_act = [d for a, d in zip(activity, p_dur_same) if a in select_act]
    print(select_act)
    print(p_dur_select_act)

我想就如何在max_p_dur_same 具有相同值的活动之间随机选择寻求帮助。而且,如何找到max(p_dur_same) 的索引,然后使用该索引在activity 中找到对应的值。请注意,activity 在我的代码中是一个 numpy 数组。

对于上面的例子,我应该得到类似的东西:

由于max(p_dur_same)不止一次出现,那么我们必须在两个(5s in p_dur same)之间随机选择。假设它选择第一个,然后是select_act = 3 p_dur_select_act = 5。我可以通过在p_dur_same 中获取第一个 5 的索引,然后使用该索引在activity 中找到相应的值来得到这个。

任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: python python-3.x indexing conditional-statements


    【解决方案1】:

    您可以在列表中找到最大条目及其索引,然后使用random 模块从列表中随机选择一个项目。该项目包含索引和随机最大元素。使用索引从activity获取对应的值:

    import random
    
    p_dur_same = [0, 5, 5]
    activity = [2, 3, 4]
    
    max_p_dur_same = max(p_dur_same)   
    maxs = [(i, x) for i, x in enumerate(p_dur_same) if x == max_p_dur_same]
    # [(1, 5), (2, 5)]
    
    k = random.choice(maxs)
    # (1, 5)
    
    p_dur_select_act = k[1]
    select_act = activity[k[0]]
    
    print(p_dur_select_act, select_act)
    # 5 3
    

    【讨论】:

    • 您好!我能问一下这些行是什么意思吗? p_dur_select_act = k[1] select_act = 活动[k[0]] ?打扰了!我只是想了解它。
    • 谢谢!我所做的是把那部分放在第一个条件部分上。例如 p_dur_same 中的数字是唯一的,例如 p_dur_same = [0, 5, 3],我该如何选择最高的,获取最高的索引并使用它来查找相应的活动?
    • 我还应该在该代码中包含随机部分吗?我虽然那个随机只有在它们具有相同值的情况下才有效?对不起,如果我继续问问题。我只是想了解和学习更多编码,因为我对 Python 很陌生。
    • 即使只有一个或多个最高值,这种方法也有效。因为从列表中随机选择一个值会返回相同的值。所以这归结为丢弃你的if 结构。
    • 哦,这意味着我不必再将它放在条件语句中,因为无论 p_dur_same 是什么,它仍然可以工作!非常感谢!
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多