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
我不太了解为什么students
会在for
中循环时被修改。它甚至不是全局变量。以下只是为了帮助您查看代码的结构。
friendsOfRobert
中找到students
for循环
(1)假设一个friend
和Robert
已配对。
(2)leftStudent
:从friend
删除Robert
和students
(3)重复findPair
,但是这次没有friend
和Robert
。随机选择Robert
的下一个等价字符(leftStudents[0]
)
在旁注中,我通过记住先前删除的一对来解决此问题,并在每次跳入下一个循环之前每次都重建原始students
集(带有下面的代码)。
if len(students) == 2:
if len(justPaired) != 0:
students.append(justPaired[0])
students.append(justPaired[1])
# do something
return
编辑:删除了不必要的示例
答案 0 :(得分:3)
函数不获得其参数的副本。他们获得对参数的引用的副本。所以,当你写
f(x):
x.append(3)
x = [2,4,5]
y = [1, 2]
f(y)
第x.append(3)
行会影响所传递的实际列表,而第x = [2, 4, 6]
行则无效,因为它会将引用的副本重新分配给参数。