В следующем коде я хочу подсчитать количество слов в word_list
в test
, код ниже может выполнить эту работу, но может быть неэффективен, есть ли лучший способ сделай это?Элемент списка экземпляров Python list1 в списке2
word_list = ["hello", "wonderful", "good", "flawless", "perfect"]
test = ["abc", "hello", "vbf", "good", "dfdfdf", "good", "good"]
result = [0] * len(word_list)
for i in range(len(word_list)):
for w in test:
if w == word_list[i]:
result[i] += 1
print(result)
не было бы более эффективно делать фильтрацию в первую очередь? Кроме того, ссылаясь на эту страницу: https://wiki.python.org/moin/TimeComplexity, поиск в списке - O (n), это может быть улучшено до O (1), если вы конвертируете 'word_list' в задавать. –
@ZaccharieRamzi Что со всем, что «делает поиск в наборе» сегодня? Ты второй, кто предложил это. Является ли мой ответ неясным? Я не делаю поиск в списке, только здесь, в dict, который так же быстро, как и поиск в наборе. Кроме того, какая фильтрация? –
Да, вы правы, я смутился тем, что имел в виду. Если вы это сделаете: 'words = set (word_list); new_test = [слово в слово в тесте, если слово в словах]; counts = collections.Counter (new_test) ' , у вас могут быть более быстрые результаты в зависимости от ситуации. –