计算数组python中每个子字符串的数量

我有一个字符串数组,例如[a_text,b_text,ab_text,a_text].我想获得包含每个前缀的对象数量,例如[‘a_’,’b_’,’ab_’],因此’a_’对象的数量将为2.

到目前为止,我一直在通过过滤数组来计数每个数,例如num_a = len(filter(lambda x:x.startswith(‘a_’),array)).我不确定这是否比循环遍历所有字段并递增每个计数器要慢,因为我正在为我计数的每个前缀过滤数组. filter()等函数比for循环更快吗?对于这种情况,如果我使用for循环,我不需要构建过滤列表,这样可以使它更快.

也许我可以使用列表理解来使其更快,而不是过滤器?

最佳答案 您可以将collections.Counter与正则表达式一起使用(如果所有字符串都有前缀):

from collections import Counter

arr = ['a_text', 'b_text', 'ab_text', 'a_text']
Counter([re.match(r'^.*?_', i).group() for i in arr])

输出:

Counter({'a_': 2, 'b_': 1, 'ab_': 1})

如果不是所有字符串都有前缀,则会抛出错误,因为re.match将返回None.如果这是可能的,只需添加一个额外的步骤:

arr = ['a_text', 'b_text', 'ab_text', 'a_text', 'test']
matches = [re.match(r'^.*?_', i) for i in arr]
Counter([i.group() for i in matches if i])

输出:

Counter({'a_': 2, 'b_': 1, 'ab_': 1})
点赞