Как создать 3-й список из вложенного списка на основе элементов в другом списке - PullRequest
1 голос
/ 10 ноября 2019

У меня есть список некоторых пользователей

list_of_users=['@elonmusk', '@YouTube','@FortniteGame','@BillGates','@JeffBezos']

и вложенный список из твитов, разбитый на слова.

tweets_splitted_by_words=[['@MrBeastYT', '@BillGates', 'YOU’RE', 'THE', 'LAST', 'ONE', 'FINISH', 'THE', 'MISSION', '#TeamTrees'], ['@MrBeastYT', '@realDonaldTrump', 'do', 'something', 'useful', 'with', 'your', 'life', 'and', 'donate', 'to', '#TeamTrees'], ['Please', 'please', 'donate']]

Я хочу создать третий новый список, созданныйподсписки tweets_splitted_by_words, только если каждый подсписок содержит по крайней мере одного из пользователей в list_of_users. Вывод, который я хочу:

output=[['@MrBeastYT', '@BillGates', 'YOU’RE', 'THE', 'LAST', 'ONE', 'FINISH', 'THE', 'MISSION', '#TeamTrees']]

Я попробовал следующий код, но он не сработал:

tweets_per_user_mentioned= []
giorgia=[]
for r in range(len(tweets_splitted_by_words)):
    giorgia.append(r)
    for _i in range(len(giorgia)):
        if _i  in range(len(list_of_users)):
         tweets_per_user_mentioned.append(tweets_splitted_by_words[r])
        else:
            pass
print(tweets_per_user_mentioned)

1 Ответ

1 голос
/ 10 ноября 2019

Поскольку вы будете выполнять поиск в списке пользователей, хорошей идеей будет иметь структуру данных set. Наборы обеспечивают O(1) поиск , что значительно уменьшает временную сложность многих проблем.

Для фильтрации я бы просто использовал встроенный в Python any ипонимание списка

set_of_users = set(list_of_users)
filtered_tweets = [tweet for tweet in tweets_splitted_by_words \
                         if any(word in set_of_users for word in tweet)]
...