gpt4 book ai didi

python - 列表删除中不应该发生的冲突

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:28 25 4
gpt4 key购买 nike

所以我有一段代码,将两个单词从一个大列表中放入数据库中,然后从列表中删除这两个单词,这样就不会再使用它们了。当列表快要结束时,它会被传递给一个不相关的函数。

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)

现在,由于无法从列表中删除 i,此操作通常会提前失败。使用一些打印语句,我发现当 iwords[choice] 不知何故最终成为相同的单词时,就会发生这种情况。但由于 choice 永远不会为 0,我不明白 iwords[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)

关于python - 列表删除中不应该发生的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43421426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com