#python #string
#python #строка
Вопрос:
Предположим, у меня есть следующие два списка, которые включают только строковые объекты.
list1 = ['UC1', 'UC1,UC2', 'UC3' ]
list2 = ['UC1', 'UC2', 'UC3']
Я хочу проверить, сколько раз UC1
, UC2
UC2
появляются в list1
Ожидаемый результат должен быть 2,1 и 1 соответственно.
На практике у меня есть миллионы объектов в list1
и list2
соответственно
Может ли кто-нибудь помочь мне сделать это на python максимально эффективно?
Спасибо
Комментарии:
1.
list2.count('UC1')
?2. Проблема в том, что у меня есть миллионы объектов в `list2′, которые следует проверять… есть ли какой-нибудь лучший способ?
3. Ваш
list1
правильно определен, т. Е. имеет 3 элемента? или там опечатка?4. Нет, в нем миллионы элементов — в приведенном примере их действительно три.
5. как насчет numpy.count() ?
Ответ №1:
n = [len([j for j in list1 if i in j]) for i in list2]
вывод
[2, 1, 1]
Ответ №2:
Это сложно. Для подсчета любого элемента в списке мы должны просмотреть весь список. Таким образом, временная сложность равна O (n). Для этого шага мы мало что можем сделать. Я рекомендую sklearn.feature_extract.text.TFIDFTransform
.
Чтобы узнать количество всех element
, мы должны сохранить количество и быстро вывести количество. Я рекомендую словарь или scipy.sparse.csr_matrix
.