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)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
編集:不要な例を削除
関数は引数のコピーを取得しません。彼らは引数への参照のコピーを取得します。だから、あなたが書くとき
f(x):
x.append(3)
x = [2,4,5]
y = [1, 2]
f(y)
この行は渡されx.append(3)
た実際のリストに影響しx = [2, 4, 6]
ますが、参照のコピーを引数に再割り当てするため、この行は効果がありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加