Python 当存在';不可能

Python 当存在';不可能,python,list,Python,List,因此,我有一段代码,将两个单词从一个大列表中放入数据库,然后从列表中删除这两个单词,这样两个单词都不会被再次使用。当列表快结束时,它被传递给一个无关的函数 def db_add(words): for i in words: choice = randint(2, 9) if len(words) < choice: finish(words) else: cursor.execute(

因此,我有一段代码,将两个单词从一个大列表中放入数据库,然后从列表中删除这两个单词,这样两个单词都不会被再次使用。当列表快结束时,它被传递给一个无关的函数

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)
def db_添加(文字):
对于我来说,用文字来说:
choice=randint(2,9)
如果len(words)<选择:
完成(字)
其他:
cursor.execute(
'插入交换(字1,字2)值(%s,%s);',(i,字[choice])
)
康涅狄格州提交
单词。删除(单词[选择])
删除(一)
现在,由于无法从列表中删除
i
,此操作通常会提前失败。通过使用一些打印语句,我发现当
I
words[choice]
以某种方式成为同一个单词时,就会发生这种情况。但既然选择从来都不是0,我不明白
I
words[choice]
怎么可能是相等的


我唯一的猜测是,它与在for语句中使用时操纵列表有关,或者这是我犯的一个非常愚蠢的错误,但我真的不知道。

您在迭代列表时正在修改列表。这必然导致问题。如果需要从列表中删除元素,建议您复制列表,从副本中删除单词,然后返回副本

def db_add(words):
    words_copy = words.copy()
    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_copy.remove(words_copy[choice])
            words_copy.remove(i)
def db_添加(文字):
words\u copy=words.copy()
对于我来说,用文字来说:
choice=randint(2,9)
如果len(words)<选择:
完成(字)
其他:
cursor.execute(
'插入交换(字1,字2)值(%s,%s);',(i,字[choice])
)
康涅狄格州提交
words\u copy.remove(words\u copy[choice])
单词\复制。删除(i)

问题的一部分可能是
游标.execute
参数应该是
'INSERT INTO swaps(word1,word2)值(%s,%s);'%(i,words[choice]
?谢谢,它似乎在大部分情况下都能正常工作。但是,你知道如何将复制的列表返回到循环中吗?我不能继续使用起始单词列表,因为我不能在数据库中有两个相同的单词。我非常确定递归将达到>300000单词列表的最大限制。