#python #strin& #list #count
#python #строка #Список #количество
Вопрос:
Есть ли какой-либо способ, которым мы можем использовать подстановочные символы в count()
?
Допустим, у меня есть список:
lst = ["abXY", "cdXY", "efXY", "&hVW", "ijVW"]
Здесь я хочу подсчитать вхождения элементов, заканчивающихся на «XY».
Существует ли какой-либо встроенный count()
подобный метод для этого?
Это не сработает:
lst.count("%XY")
Почему?
Ответ №1:
В этом случае вы можете использовать str.endswith
:
&&t;&&t;&&t; lst = ["abXY", "cdXY", "efXY", "&hVW", "ijVW"]
&&t;&&t;&&t; sum(1 for x in lst if x.endswith("XY"))
3
Для более общего сопоставления с «подстановочными знаками» используйте регулярное выражение.
&&t;&&t;&&t; import re
&&t;&&t;&&t; p = re.compile(".*XY$")
&&t;&&t;&&t; sum(1 for x in lst if p.match(x))
3
Вы могли бы также использовать lst.count
, определив специальный класс, который использует сопоставление регулярных выражений в своем __eq__
методе, но я действительно не понимаю, зачем вам это нужно…
class M:
def __init__(self, p):
self.p = "^" p.replace("%", ".*") "$"
def __eq__(self, x):
return re.match(p, x)
&&t;&&t;&&t; lst.count(M("%XY"))
3
Комментарии:
1. Это было бы идеально для большинства случаев, но что, если вы работаете с тысячами значений? Вы бы потратили ресурсы впустую, перебирая каждый элемент.
2. @Countour-Inte&ral Ну, если вы хотите проверить все значения, вам нужно перебирать все значения, верно?
count
делает то же самое, только без видимогоfor
ключевого слова.3. для массива длиной 5 можно использовать итерацию, но цикл — не единственный способ сделать это, например, в C #
.count()
используются операции O (1) для этого и других подобных методов манипулирования массивом. то же самое происходит и в Python при работе с наборами запросов вDjan&o
. Вы не перебираете каждую строку в базе данных, если хотите найти только определенный шаблон.