使用For-Each循环从列表中删除项时出现Python逻辑错误

使用For-Each循环从列表中删除项时出现Python逻辑错误,python,list,oop,logic,tweepy,Python,List,Oop,Logic,Tweepy,所以我有一个使用Tweepy捕获的大约300条推文的列表。这些推文中有很多是我想从列表中删除的转发。这些可以很容易识别,因为它们以“RT@”开头 我的问题是,不管我尝试了什么方法,这些推文中的一些仍然能够通过我的循环而不被删除。我已经尝试了一些你在下面看到的变体,包括“startswith”函数和我在下面所做的“in”操作符 你能看出我做错了什么吗 def CleanData(tweets): removed_tweets = [] for tweet in tweets:

所以我有一个使用Tweepy捕获的大约300条推文的列表。这些推文中有很多是我想从列表中删除的转发。这些可以很容易识别,因为它们以“RT@”开头

我的问题是,不管我尝试了什么方法,这些推文中的一些仍然能够通过我的循环而不被删除。我已经尝试了一些你在下面看到的变体,包括“startswith”函数和我在下面所做的“in”操作符

你能看出我做错了什么吗

def CleanData(tweets):
    removed_tweets = []
    for tweet in tweets:
      if ("RT @") in tweet.full_text:
          tweets.remove(tweet)
          removed_tweets.append(tweet)
    return tweets

元素没有从列表中完全过滤的原因是您正在使用删除操作,该操作会从列表中动态删除元素,并且列表大小不断缩小。这导致python无法跟踪以前所在的元素,每次删除元素时都会跳过元素

查看我在一个简单列表上尝试的删除操作的输出:

列表2=['x'、'y1'、'y2'、'x'] 对于清单2中的i: ... 印刷品(一) ... 如果i=='x': ... 清单2.删除(i)

输出: x y2 x

我建议您在列表中使用pythonfilter方法。这将大大简化您的代码。

list(filter(lambda x:x!='x',list2))这就是我如何从原始代码中创建一个filter方法的。你可以试试你的@M5RKED