Python ';x';在列表上迭代时不在列表中

Python ';x';在列表上迭代时不在列表中,python,for-loop,recursion,python-3.x,reddit,Python,For Loop,Recursion,Python 3.x,Reddit,我试图做的是迭代注释列表,删除添加到名为cText的值中的当前注释,如果cText超过9000个字符,则对同一函数进行递归调用,并将其返回值添加到botComments。我还试图将返回的botComments列表从递归函数合并到最顶端的botComments列表,其中包含botComments+repliesToComments(comments,author),尽管我不知道我是否做得对。奇怪的是,它似乎也无法在一个列表中找到一条注释,该注释肯定会引发我在下面粘贴的异常。在我的AP Comp S

我试图做的是迭代注释列表,删除添加到名为
cText
的值中的当前注释,如果
cText
超过9000个字符,则对同一函数进行递归调用,并将其返回值添加到
botComments
。我还试图将返回的
botComments
列表从递归函数合并到最顶端的
botComments
列表,其中包含
botComments+repliesToComments(comments,author)
,尽管我不知道我是否做得对。奇怪的是,它似乎也无法在一个列表中找到一条注释,该注释肯定会引发我在下面粘贴的异常。在我的AP Comp Sci课程中,我对递归很糟糕,尽管我希望从任何能修复我下面乱七八糟的代码的人那里了解我做错了什么。谢谢:)

以下是我目前的例外情况:

Traceback (most recent call last):
  File "C:\Users\Josh\Desktop\bot.py", line 62, in <module>
    print(repliesToComments(submission.comments, submission.author.name))
  File "C:\Users\Josh\Desktop\bot.py", line 36, in repliesToComments
    botComments + repliesToComments(comments, author)
  File "C:\Users\Josh\Desktop\bot.py", line 39, in repliesToComments
    comments.remove(comment)
ValueError: list.remove(x): x not in list

您正在递归调用
repliesToComments()
,但参数完全相同。这只会导致问题

递归调用正在从同一列表中删除条目,当它返回时,这些条目仍将消失。但是,由于您在列表的副本上循环,外部调用将不会更新,并尝试删除内部递归调用已经删除的注释

可能您想在递归时调用
repliesToComments()
以获取不同的注释集?我猜你是想打电话给它征求意见,而不是回复

代码的另一个问题是忽略递归调用的返回值:

botComments + repliesToComments(comments, author)
这将添加list
botComments
和递归调用的返回值,创建一个新列表,然后通过不将其分配给变量将其放到地板上。您可能希望使用:

botComments += repliesToComments(comments, author)

相反。

您以递归方式调用
repliesToComments()
,但参数完全相同。这只会导致问题

递归调用正在从同一列表中删除条目,当它返回时,这些条目仍将消失。但是,由于您在列表的副本上循环,外部调用将不会更新,并尝试删除内部递归调用已经删除的注释

可能您想在递归时调用
repliesToComments()
以获取不同的注释集?我猜你是想打电话给它征求意见,而不是回复

代码的另一个问题是忽略递归调用的返回值:

botComments + repliesToComments(comments, author)
这将添加list
botComments
和递归调用的返回值,创建一个新列表,然后通过不将其分配给变量将其放到地板上。您可能希望使用:

botComments += repliesToComments(comments, author)

相反。

我的意思是调用
repliesToComments()
,其中包含的注释列表不包括我已经迭代过的注释。@Josh:调用完成后,您仍将迭代其余的注释。这就是你的问题。@Josh:假设你有一个列表
['foo',bar',baz']
并且已经删除了
'foo'
,然后递归
['bar',baz']
,但是递归调用也删除了
'bar'
,你的外部循环仍然会处理
'bar'
,并再次尝试删除它。啊,我明白你现在在说什么。我将编辑代码以反映这些更改。感谢您的帮助@MartijnI打算调用
repliesToComments()
,其中包含的注释列表不包括我已经迭代过的注释。@Josh:在调用完成后,您仍将迭代其余的注释。这就是你的问题。@Josh:假设你有一个列表
['foo',bar',baz']
并且已经删除了
'foo'
,然后递归
['bar',baz']
,但是递归调用也删除了
'bar'
,你的外部循环仍然会处理
'bar'
,并再次尝试删除它。啊,我明白你现在在说什么。我将编辑代码以反映这些更改。谢谢你的帮助@Martijn