#python #list #oop #logic #tweepy
#python #Список #ооп #Логические #tweepy
Вопрос:
Итак, у меня есть список из примерно 300 твитов, записанных с помощью Tweepy. Многие из этих твитов являются ретвитами, которые я хочу удалить из списка. Их можно легко идентифицировать, поскольку они начинаются с «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
Ответ №1:
Причина, по которой элементы не полностью фильтруются из вашего списка, заключается в том, что вы используете операцию удаления, которая удаляет элементы из списка динамически, а размер списка продолжает уменьшаться. Это приводит к тому, что python теряет отслеживание элемента, на котором он был ранее, и пропускает элементы каждый раз, когда удаляет элемент.
Взгляните на результат операции удаления, которую я опробовал в простом списке:
list2=[‘x’,’y1′,’y2′,’x’] для i в list2: … print(i) … если i==’x’: … list2.remove(i)
Вывод: x y2 x
Я предлагаю вам использовать метод фильтрации python в списке. Это значительно упростит ваш код.
Комментарии:
1. список (фильтр (лямбда x: x!=’x’,list2)) Вот как я создал метод фильтрации из исходного кода. Вы можете попробовать свой! @M5RKED