运行montecarlo sim;python循环时zip出现问题

2024-10-03 21:36:35 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python2.7中工作。你知道吗

我肯定代码有点笨拙,但我会尽量简单地解释它。你知道吗

我有两张单子:

T = [[1,0], [1,0], [0,5]]
S = [[1], [3], [2]]

我需要将B中对应的值添加到T中对应列表的末尾,因此使用zip将它们放在一起。你知道吗

然后我计算每个列表的第一个值减去第三个值的结果,并使用另一个zip函数附加该值。你知道吗

所以当我运行函数时,T变量现在看起来像[[1,0,1,0],[1,0,3,-2],[0,5,2,-2]]。你知道吗

然后我有一系列if语句,如果某些值高于或低于其他值,则列表返回win、loss或tie。你知道吗

我想模拟我的函数(starterTrans)的结果多次。问题是当我使用:

def MonteCarlo(T, S, x):
    for i in range(0, x):
        starterTrans(T, S)

对于每个模拟,我得到的是不同版本的T。因此,第一次通过模拟时,T在每个列表中有适当数量的元素(四个),但是在每次运行之后,会添加越来越多的变量。你知道吗

我需要一种方法把T锁定到原来的四个变量,不管我想用多少次。我正在努力找到一个办法。有什么想法吗?你知道吗

我知道我的代码很复杂,但如果它能帮助任何人理解我试图描述的问题:

def starterTrans(team, starter):
    wins = 0
    losses = 0
    nd = 0
    random.shuffle(team)
    for t, s in zip(team, starter):
        t.extend(s)
    score_add(team, exit_score(team, starter))
    length = len(starter)
    for i in range(0, length):
        if team[i][4] > 0 and (team[i][1] > -team[i][4]) and team[i][2] >= 5:
            wins += 1
        elif team[i][4] < 0 and (team[i][1] <= -team[i][4]):
            losses += 1
        elif (team[i][4] <= 0 and team[i][1] >= -team[i][4]):
            nd += 1
    return wins, losses, nd

def score_add(team, exit_scores):
    for t, e in zip(team, exit_scores):
        t.append(e)
    return team

def exit_score(team, starter):
    exit_scores = []
    length = len(starter)
    for i in range(0, length):
        score = team[i][0]-team[i][3]
        exit_scores.append(score)
    return exit_scores

def MonteCarlo(team, starter, x):
    for i in range(0, x):
        starterTrans(team, starter)

谢谢你的帮助。你知道吗


Tags: and函数in列表fordefexitrange
2条回答

将最后一行更改为starterTrans(team[:], starter)。这将传递一份团队的副本,保留原件原封不动。你知道吗

我想你只需要改变这个:

def MonteCarlo(T, S, x):
    for i in range(0, x):
        starterTrans(T, S)

对此:

def MonteCarlo(T, S, x):
    for i in range(0, x):
        starterTrans(T[:], S)

这将把T的副本传递给starterTrans(..),而不是原始列表。如果您正在starterTrans(..)中编辑T的元素,这将毫无帮助。在这里你需要一份深度副本。看看这里浅拷贝和深拷贝的区别:What is the difference between a deep copy and a shallow copy?。你知道吗

相关问题 更多 >