代码之家  ›  专栏  ›  技术社区  ›  JS Lavertu

如何在Python中随机返回列表中最大元素之一的索引?

  •  4
  • JS Lavertu  · 技术社区  · 8 年前

    我的程序计算3个不同值出现的次数,并将其存储在如下列表中 classes = [class1,class2,class3]

    例如,如果我有 classes = [5,2,5] ,我想输出0或2。 classes = [1,1,1] ,0,1和2可以。 最后,如果我有 classes = [1,10,1] ,我想输出1。

    到目前为止,我已经从其他问题中拼凑出了这一点,但这不是我想要的方式,我不明白为什么。

    classes = [class1,class2,class3]
    dupes = [n for n, x in enumerate(classes) if x in classes[:n]]
    class_prediction = dupes[random.randint(0,len(dupes))] + 1
    

    2 回复  |  直到 8 年前
        1
  •  7
  •   Cory Kramer    8 年前

    您可以使用 random.choice 列表理解如下

    indices = [idx for idx, val in enumerate(values) if val == largest]
    random.choice(indices)
    

    举个例子,下面是多次调用的结果

    >>> import random
    >>> values = [5, 2, 5, 3, 1]
    >>> largest = max(values)
    >>> indices = [idx for idx, val in enumerate(values) if val == largest]
    >>> random.choice(indices)
    2
    >>> random.choice(indices)
    0
    >>> random.choice(indices)
    2
    
        2
  •  4
  •   user94559    8 年前

    import random
    
    def get_random_max(classes):
        maximum_indexes = []
        maximum_value = None
    
        for i, n in enumerate(classes):
            if maximum_value is None or n > maximum_value:
                maximum_value = n
                maximum_indexes = [i + 1]
            elif n == maximum_value:
                maximum_indexes.append(i + 1)
    
        return random.choice(maximum_indexes)
    
    print(get_random_max([5, 2, 5]))  # prints 1 or 3 with equal probability
    
    推荐文章