【问题标题】:Print different values with random in python 3.x在 python 3.x 中随机打印不同的值
【发布时间】:2019-05-15 20:51:51
【问题描述】:
from random import randint

result = []
colors = {1: "Red", 2: "Green", 3: "Blue", 4: "White"}

while True:
    for key in colors:
        ball = randint(1,4)
        probability = (ball/10)
        result.append(probability)

    break

print(result)

这段代码给了我 4 个值,这没问题,但我不想重复。因此,如果程序采用例如“白色”,它不会将其包含在迭代中。有什么想法吗?

【问题讨论】:

  • 查看random.shuffle
  • while 循环毫无意义;而且我不清楚您要做什么,您遍历colors 但从不使用key
  • 如果你有一个更大的列表,并且你需要从中抽取n元素而不进行替换,你可以直接将列表打乱,取draw = big_list[:n]。
  • @L3via 比sample 更好
  • @Hiddenguy 您需要指定样本大小,尝试新功能时请阅读文档docs.python.org/3/library/random.html#random.sample

标签: python python-3.x random


【解决方案1】:

您可以检查该特定值是否已被采用。

list_taken = []
number = randint(1,n)
while number in list_taken:
    number = randint(1,n)
list_taken.append(number)

那么上面 4 行代码所做的就是,维护一个已经取值的列表并重复寻找新值直到它得到一个新值。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    如果您有 4 个值,并且只想要它们的随机排列,只需使用 random.shuffle:

    from random import shuffle
    
    colors = {1: "Red", 2: "Green", 3: "Blue", 4: "White"}
    
    balls = list(colors)
    shuffle(balls)
    result = [ball/10 for ball in balls]
    
    print(result)
    

    另一个选项(尤其适用于较大的列表,因为洗牌很“慢”)是使用random.sample:

    from random import sample
    
    colors = {1: "Red", 2: "Green", 3: "Blue", 4: "White"}
    
    result = [ball/10 for ball in sample(colors, 4)]
    
    print(result)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2021-12-22
      • 2020-10-31
      相关资源
      最近更新 更多