【问题标题】:How to choose a random element from a list and then find its index in the list? [duplicate]如何从列表中选择一个随机元素,然后在列表中找到它的索引? [复制]
【发布时间】:2021-01-10 09:28:57
【问题描述】:

我有一个名称列表,使用random.choice(),我可以从列表中获取一个随机元素。现在我试图找出给定元素在列表中的索引。这是我目前所拥有的:

import random

x = ['Jess','Jack','Mary','Sophia','Karen','Addison','Joseph','Eric','Ilona','Jason']
y = random.choice(x)
print(y)

【问题讨论】:

  • x.index(y) 会给你索引。
  • 列表是否包含重复项?
  • 是的,这很重要。 index 只返回列表中的第一个匹配项。
  • list.index(element, start,end) 是命令。因此,如果您不提供开始或结束,那么它将找到第一次出现。如果有重复,除非你指定起始位置,否则它不会找到下一个
  • 这能回答你的问题吗? How to randomly select an item from a list? 在那里看到这个答案:stackoverflow.com/a/12373205/7851470

标签: python


【解决方案1】:

你可以使用list.index():

x.index(y)

这将返回列表中找到匹配项的第一个索引。但是,如果您的列表中有重复项,这将不会返回正确的索引。


如果您有重复项,更好的处理方法是随机化索引而不是值。因为您将始终存储您引用的正确索引,而不是第一次出现。

y = random.randint(0, len(x))
#3

x[y]

#Sophia

【讨论】:

    【解决方案2】:

    您可以使用randrange

    import random
    
    x = ['Jess','Jack','Mary','Sophia','Karen','Addison','Joseph','Eric','Ilona','Jason']
    i = random.randrange(len(x))
    
    print(i, x[i])
    

    示例输出:

    7 埃里克

    【讨论】:

      【解决方案3】:

      这可以通过两种方式完成。

      方法一

      1. 求列表的长度 (n),然后从 0-n 中选择一个随机整数作为 K。
      2. 返回列表中第 k 个索引和索引 k 处的元素
      import random
      x = ['Jess','Jack','Mary','Sophia','Karen','Addison','Joseph','Eric','Ilona','Jason']
      k = random.randrange(len(x)) # k is the random index
      print(x[k], k) # x[k] will be the random element
      
      

      方法二

      使用random.choice 选择随机元素,然后使用list.index 查找索引

      value= random.choice(x)
      index= x.index(value)
      
      

      注意 1当列表中存在重复元素时,这不起作用 p>

      最好的方法是方法1


      你也可以使用random.choice来获取索引

      index = random.choice(range(len(x)))
      value = x[index]
      

      但这与random.randange相比有点慢

      【讨论】:

        【解决方案4】:

        你可以给y = x.index(random.choice(x))这会将索引分配给y

        【讨论】:

        • 您的答案与@PacketLoss 有何不同
        • 我猜我们俩同时回复了
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-07
        • 2023-01-11
        • 2011-05-29
        • 2018-03-06
        • 2021-04-12
        • 1970-01-01
        相关资源
        最近更新 更多