到目前为止,我一直在通过过滤数组来计数每个数,例如num_a = len(filter(lambda x:x.startswith(‘a_’),array)).我不确定这是否比循环遍历所有字段并递增每个计数器要慢,因为我正在为我计数的每个前缀过滤数组. filter()等函数比for循环更快吗?对于这种情况,如果我使用for循环,我不需要构建过滤列表,这样可以使它更快.
也许我可以使用列表理解来使其更快,而不是过滤器?
解决方法 您可以将collections.Counter与正则表达式一起使用(如果所有字符串都有前缀):from collections import Counterarr = ['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})总结
以上是内存溢出为你收集整理的计算数组python中每个子字符串的数量全部内容,希望文章能够帮你解决计算数组python中每个子字符串的数量所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)