【问题标题】:How do I create randomized lists using a nested for loop如何使用嵌套的 for 循环创建随机列表
【发布时间】:2021-01-26 02:44:38
【问题描述】:

因此,我尝试将 2 个随机变量列表相互比较,以找出它们相同的概率。我所做的是使用 for 循环制作了 2 个带有随机数的列表,但是为了找到概率,我试图在另一个 for 循环中创建列表,以便制作 10000 对列表进行比较,但我可以'让它工作。

import random
import collections

N= 10000
count = 0
playerPick=[]
randomPick=[]


for j in range (N):
    for i in range(4):
        playerPick.append(random.randrange(1,21))
    print(playerPick)

    for i in range(4):
        randomPick.append(random.randrange(1,21))
    print(randomPick)

    if collections.Counter(playerPick) == collections.Counter(randomPick):
        count+=1

    probability = count/N

    print("Probability of winning: ", probability)

列表最终会变得超长,但我只希望它们长 4 个。

【问题讨论】:

  • 你有asked a rubber duck吗?单步调试调试器中的代码,您会到达重置列表的位置并...?
  • 10000*4 = 40000 个值将附加到列表中。你想重复这个循环多少次?

标签: list for-loop random nested-loops probability


【解决方案1】:

这可能是计算平均匹配数的更有效方法。

import random
import collections

N = 10000   # main list length
L = 4  # each element is list of 4 elements

def getpct():
    # create random list of lists
    playerPick=[[random.randrange(1,21) for x in range(L)] for n in range(N)]
    randomPick=[[random.randrange(1,21) for x in range(L)] for n in range(N)]
    
    # create match list, 1=match else 0
    matches = [1 if p==r else 0 for p,r in zip(playerPick,randomPick)]

    return sum(matches)/N  # percent matches

allpcts = [getpct() for r in range(1000)]  # run test 1000 times
avgpct = sum(allpcts)/1000   # average percent

print(f'Avg Pct: {avgpct}%')

输出

Avg Pct: 6.2000000000000025e-06%

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多