【问题标题】:Python Logic Error using a For Each Loop to Remove items from List使用 For Each 循环从列表中删除项目的 Python 逻辑错误
【发布时间】:2021-05-25 10:21:15
【问题描述】:

所以我有一个使用 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 list oop logic tweepy


    【解决方案1】:

    元素没有从列表中完全过滤的原因是您使用了删除操作,该操作会动态地从列表中删除元素并且列表大小不断缩小。这会导致 python 丢失它之前所在的元素,并在每次删除元素时跳过一个元素。

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

    list2=['x','y1','y2','x'] 对于 list2 中的 i: ...打印(一) ...如果我=='x': ... list2.remove(i)

    输出: X y2 x

    我建议你使用 python filter 方法就行了。它将大大简化您的代码。

    【讨论】:

    • list(filter(lambda x: x!='x',list2)) 这就是我从原始代码中创建过滤器方法的方式。你可以试试你的! @M5RKED
    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多