Also habe ich ein Stück Code, der zwei Wörter in eine Datenbank aus einer großen Liste legt, und dann beide Wörter aus der Liste entfernt, so dass keiner wieder verwendet wird. Wenn die Liste fast zu Ende ist, wird sie an eine nicht verwandte Funktion übergeben.Kollisionen in Listenentfernungen, wenn es nicht sein sollte
def db_add(words):
for i in words:
choice = randint(2, 9)
if len(words) < choice:
finish(words)
else:
cursor.execute(
'INSERT INTO swaps (word1, word2) VALUES (%s, %s);', (i, words[choice])
)
conn.commit()
words.remove(words[choice])
words.remove(i)
Nun, dies fehlschlägt: in der Regel früh wegen nicht in der Lage zu sein i
aus der Liste zu entfernen. Mit einigen Druckanweisungen fand ich, dass dies passierte, wenn i
und words[choice]
irgendwie die gleichen Wörter sind. Aber da die Wahl nie 0 ist, sehe ich nicht, wie i
und words[choice]
jemals gleich sein können.
Meine einzige Vermutung ist, dass es etwas mit der Manipulation von Listen während der Verwendung in Anweisungen zu tun hat, oder es ist ein wirklich dummer Fehler, den ich mache, aber ich habe wirklich keine Ahnung.
Könnte ein Teil des Problems zumindest sein, dass das 'cursor.execute' Argument' 'INSERT INTO swaps (word1, word2) WERTE (% s,% s); ' % (i, words [choice] '? – martineau