如果我必须从列表中选择一个随机数而不使用numpy和scklearn

时间:2019-07-09 04:03:51

标签: python python-3.x

我正在尝试从列表中选择一个随机数

a = [0,5,27,6,13,28,100,45,10,79]

使用此代码:

a = [0,5,27,6,13,28,100,45,10,79]
p = list(map(lambda x: random.uniform(0,100), a))
c = a[p.index(min(p))]
print(c)

有人可以告诉我这段代码要做什么吗?
尤其是将'min'分配给变量'p'的最后一行?

此外,如果我将第二行代码更改为此:

p = list(map(lambda x: random.uniform(0,100) - x , a))

这里到底发生了什么?

预期:列表'a'中的随机数
实际:我看到最小数字出现在变量'c'中的频率要比其他数字高。

2 个答案:

答案 0 :(得分:0)

在线

p = list(map(lambda x: random.uniform(0,100), a))

列表p中将为数组中的每个数字填充一个从0到100的不同随机数。因此,在您的示例中,将生成10个随机数。该变量在该程序中可能被命名为p,因为它是“概率分布”。接下来,计算机将确定所生成随机数的最小值,并用作访问原始数组的索引,然后从数组中获取一个值,并将其用于c的值。

在表达式中包含-x时,您正在更改生成数字的加权方式,以包括有关与该数字相对应的原始数组中的值的信息。这将改变概率分布,使其取决于原始数组中的值。

在这种情况下,原始数组中较高的数字将被更频繁地选择。我不明白为什么您会越来越少地获得这个数字。

答案 1 :(得分:0)

第1部分

您可以在Python中使用random.choice中的内置函数。

from random import choice

a = [0,5,27,6,13,28,100,45,10,79]
choice(a)

第2部分

a = [0,5,27,6,13,28,100,45,10,79]

p = list( # The return type will be a list
       map( # map a thing to a thing; for every 'a' run lambda.
           lambda x: random.uniform(0,100), # Get a random number between 0 and 100.
           a # List of input variable that will be x in line above.
       )
)

c = a[ # return index of a
    p.index( # get index of number
        min(p) # Find the minimal var in list p, returns number
    )
]
  

预期:“ a”列表中的随机数   实际:我看到变量“ c”中的最小数字比其他数字更常见

初始化列表p时,它将以python解释器指定的特定顺序创建。 您的代码正在查找将创建的最小值存储在列表中的索引位置。 这是python中的列表和迭代固有的特性,它是从Python中的C代码和构成C编译器的汇编代码继承而来的。

获取索引时您在做什么, 您正在测量最低编号在内存中存储的列表中的位置吗? 在计算机编程中,更一般的列表以任何顺序存储在内存中。 与数组不同,数组不能具有其大小(它们所持有的职位数量发生了变化)列表并不关心发布。 列表不必关心存储在其中的内容,您可以创建仅对象的列表,其中对象可以是整数,浮点数,字符串和对象类型。 每次创建新列表位置时,它都会被写入内存的下一个可用部分,其中一部分将自身标识为“什么列表和什么索引”。 列表在内存中的字面意思是引用的半顺序集合。 想象一顶帽子,上面写着和平的十二进制电话号码。 帽子是内存中的列表,而呼叫号码是存储在列表中的数据。 电话号码的排列顺序取决于您如何取出或放入电话。 Python解释器中执行此功能的函数。 您可以轻松地将电话号码添加到帽子上, 但这并不会影响将它们放入和移出内存的功能。 内存中存储数字的位置没有随机性, 由于存在夸克的python,因此将其存储在此,可能是由Python解释器中的汇编器代码跟踪的。

例如,如果我将您的函数运行了100代,那么我们将在某些数字周围看到清晰的集群。

100 Generation of p.int(min(p))

(虽然这可能不是正确的图形;茎和叶图却是。) 我们可以清楚地看到数据中存在数字6的偏差。

min()函数返回列表中的最小值。 列表的顺序不会被重写。 See more about min

第3部分

p = list( # The return type will be a list
       map( # map a thing to a thing; for every 'a' run lambda.
           lambda x: random.uniform(0,100) - x, # Get a random number between 0 and 100, then subtract x from number.
           a # List of input variable that will be x in line above.
       )
)