【问题标题】:Python: Random numbers into a listPython:将随机数放入列表中
【发布时间】:2013-05-15 08:09:22
【问题描述】:

创建一个名为 my_randoms 的“列表”,其中包含 0 到 100 之间的 10 个随机数。

这是我目前所拥有的:

import random
my_randoms=[]
for i in range (10):
    my_randoms.append(random.randrange(1, 101, 1))
    print (my_randoms)

不幸的是 Python 的输出是这样的:

[34]
[34, 30]
[34, 30, 75]
[34, 30, 75, 27]
[34, 30, 75, 27, 8]
[34, 30, 75, 27, 8, 58]
[34, 30, 75, 27, 8, 58, 10]
[34, 30, 75, 27, 8, 58, 10, 1]
[34, 30, 75, 27, 8, 58, 10, 1, 59]
[34, 30, 75, 27, 8, 58, 10, 1, 59, 25]

它会按照我的要求生成 10 个数字,但它一次生成一个。我做错了什么?

【问题讨论】:

  • 把你的打印放在 for 循环之后...而不是里面。
  • 实际上,您一次生成一个数字,但您的原始代码让您在每次生成一个时打印这些值。下面讨论打印语句的解决方案只是在生成所有数字后等待并打印列表。
  • Python 中的计算机程序总是一次只做一件事。每个程序都是一系列非常小的步骤。现在,问题变成了“打印列表时我希望完成哪些步骤?”。显然,您希望在打印之前将所有随机数添加到列表中。如果在打印之前删除缩进,它将在 for 循环的所有步骤重复执行后执行。缩进打印是构建列表时执行的步骤序列的一部分。
  • xrange 现在是range,python 3.x 以上。

标签: python list random


【解决方案1】:

修复print语句的缩进

import random

my_randoms=[]
for i in range (10):
    my_randoms.append(random.randrange(1,101,1))

print (my_randoms)

【讨论】:

  • 对于其他初学者(未来的读者),也许扩展一下关于缩进错误的解释?
  • 这实际上是解决 OP 查询的唯一答案。其他当然很好,但他们只是改进/提供语法或方法等方面的替代方案。OP的问题只是缩进,伙计们!
【解决方案2】:
import random
my_randoms = [random.randrange(1, 101, 1) for _ in range(10)]

【讨论】:

    【解决方案3】:

    您可以使用random.sample 一键生成列表:

    import random
    my_randoms = random.sample(range(100), 10)
    

    这会生成 0 到 99(含)范围内的数字。如果您想要 1 到 100,可以使用它(感谢 @martineau 指出我复杂的解决方案):

    my_randoms = random.sample(range(1, 101), 10)
    

    【讨论】:

    • 样本不会包含重复值,这在这个用例中可能很重要,也可能无关紧要,但值得注意
    • 对于 1..100 范围内的值,使用 random.sample(xrange(1, 101), 10) 比使用列表推导更简单。
    • for python3 my_randoms = random.sample(range(100), 10)
    • 我得到一个错误,'xrange' 没有定义。我会错过任何图书馆吗?
    • @thanos.a xrange 在 Python 3 中不再存在,但您可以使用 range 代替:geeksforgeeks.org/range-vs-xrange-python
    【解决方案4】:
    import random
    
    a=[]
    n=int(input("Enter number of elements:"))
    
    for j in range(n):
           a.append(random.randint(1,20))
    
    print('Randomised list is: ',a)
    

    【讨论】:

    • 感谢您的回答。根据要求,对他做错什么做一个简短的解释会很好。
    【解决方案5】:
    my_randoms = [randint(n1,n2) for x in range(listsize)]
    

    【讨论】:

      【解决方案6】:

      这里我使用sample方法生成0到100之间的10个随机数。

      注意:我使用的是 Python 3 的 range 函数(不是 xrange)。

      import random
      
      print(random.sample(range(0, 100), 10))
      

      输出被放入一个列表

      [11, 72, 64, 65, 16, 94, 29, 79, 76, 27]
      

      【讨论】:

      • 其实0到99之间不用替换。
      【解决方案7】:

      这已经晚了,但万一有人觉得这很有帮助。

      你可以使用列表推导。

      rand = [random.randint(0, 100) for x in range(1, 11)]
      print(rand)
      

      输出:

      [974, 440, 305, 102, 822, 128, 205, 362, 948, 751]
      

      干杯!

      【讨论】:

        【解决方案8】:

        xrange() 不适用于 3.x。

        numpy.random.randint().tolist() 是指定区间内整数的绝佳替代方案:

         #[In]:
        import numpy as np
        np.random.seed(123) #option for reproducibility
        np.random.randint(low=0, high=100, size=10).tolist()
        
        #[Out:]
        
        [66, 92, 98, 17, 83, 57, 86, 97, 96, 47]
        

        你也有 np.random.uniform() 用于浮动:

        #[In]:
        np.random.uniform(low=0, high=100, size=10).tolist()
        
        #[Out]:
        [69.64691855978616,
        28.613933495037948,
        22.68514535642031,
        55.13147690828912,
        71.94689697855631,
        42.3106460124461,
        98.07641983846155,
        68.48297385848633,
        48.09319014843609,
        39.211751819415056]
        

        【讨论】:

          【解决方案9】:

          简单的解决方案:

          indices=[]
          for i in range(0,10):
            n = random.randint(0,99)
            indices.append(n)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-01-23
            • 2010-12-04
            • 1970-01-01
            • 1970-01-01
            • 2021-06-06
            • 2014-08-29
            • 1970-01-01
            相关资源
            最近更新 更多