在for循环中调用自身(函数),并更改局部变量b

2024-10-04 05:30:14 发布

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

def findPair(students, Robert):
    #...
        if len(students) == 2:
            #do something
            return
        else:
            for friend in friendsOfRobert:
                print(students)
                leftStudents = removePairFromStudents(students, friend, Robert)
                if len(leftStudents) != 0:
                    findPair(leftStudents, leftStudents[0])
            return

我不太明白为什么studentsfor内部循环时会被修改。它甚至不是全局变量。下面只是帮助您了解代码的结构。你知道吗

  1. 。。。部分:从students中查找friendsOfRobert
  2. for循环

    (1)假设一个friendRobert配对。你知道吗

    (2)leftStudent:从students中删除friendRobert

    (3)重复findPair,但这次没有friendRobert。下一个等价的Robert是随机选择的(leftStudents[0]

在旁注中,我解决了这个问题,方法是记住之前删除的一对,每次在跳入下一个循环之前重建原始的students集(下面有代码)。你知道吗

if len(students) == 2:
    if len(justPaired) != 0:
        students.append(justPaired[0])
        students.append(justPaired[1])
    # do something
    return

编辑:删除不必要的示例


Tags: 代码friendforlenreturnifdorobert
1条回答
网友
1楼 · 发布于 2024-10-04 05:30:14

函数获取其参数的副本。他们得到了参数的引用副本。所以,当你写作的时候

 f(x):
     x.append(3)
     x = [2,4,5]


 y = [1, 2]
 f(y)

x.append(3)影响传递的实际列表,而行x = [2, 4, 6]没有影响,因为它将引用的副本重新分配给参数。你知道吗

相关问题 更多 >