加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:05:53 所属栏目:Python 来源:网络整理
导读:我有一个字符串数组,例如[a_text,b_text,ab_text,a_text].我想获得包含每个前缀的对象数量,例如[‘a_’,’b_’,’ab_’],因此’a_’对象的数量将为2. 到目前为止,我一直在通过过滤数组来计数每个数,例如num_a = len(filter(lambda x:x.startswith(‘a_’),a
我有一个字符串数组,例如[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','a_text','test']
matches = [re.match(r'^.*?_',i) for i in arr]
Counter([i.group() for i in matches if i])

输出:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读