我正在尝试从列表中选择一个随机数
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'中的频率要比其他数字高。
答案 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代,那么我们将在某些数字周围看到清晰的集群。
(虽然这可能不是正确的图形;茎和叶图却是。) 我们可以清楚地看到数据中存在数字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.
)
)