Disons que j'ai un tableau/une liste de choses que je veux comparer. Dans les langages avec lesquels je suis plus familier, je ferais quelque chose comme
for (int i = 0, i < mylist.size(); i++)
for (int j = i + 1, j < mylist.size(); j++)
compare(mylist[i], mylist[j])
Cela garantit que nous ne comparons chaque paire qu'une seule fois. Dans un contexte particulier, je fais de la détection de collision sur un groupe d'objets contenus dans la liste. Pour chaque collision détectée, un petit objet "collision" décrivant la collision est ajouté à une liste, qu'une autre routine parcourt ensuite en boucle pour résoudre chaque collision (en fonction de la nature des deux objets en collision). Évidemment, je ne veux signaler chaque collision qu'une seule fois.
Maintenant, quelle est la façon pythonique de faire cela, puisque Python favorise l'utilisation d'itérateurs plutôt que de boucler sur des indices ?
J'avais le code suivant (bogué) :
for this in mylist:
for that in mylist:
compare(this, that)
Mais il est clair que chaque collision est détectée deux fois, ce qui entraîne un comportement étrange lorsqu'on essaie de les résoudre. Quelle est donc la solution pythique ici ?