python字符串过滤性能比较

总共比较5种方法。直接看代码:

import random
import time
import os
import string

base = string.digits+string.punctuation
total = 100000

def loop(ss):
    """循环"""
    rt = ''
    for c in ss:
        if c in '0123456789':
            rt = rt + c
    return rt

def regular(ss):
    """正则表达式"""
    import re
    rt = re.sub(r'\D', '', ss)
    return rt

def filter_mt(ss):
    """函数式"""
    return filter(lambda c:c.isdigit(), ss)

def list_com(ss):
    """列表生成式"""
    isdigit = {'0': 1, '1': 1, '2': 1, '3': 1, '4': 1,
                        '5':1, '6':1, '7':1, '8':1, '9':1}.has_key
    return ''.join([x for x in ss if isdigit(x)])

def str_tran(ss):
    """string.translate()"""
    table = string.maketrans('', '')
    ss = ss.translate(table,string.punctuation)
    return ss

if __name__ == '__main__':
    lst = []
    for i in xrange(total):
        num = random.randrange(10, 50)
        ss = ''
        for j in xrange(num):
            ss = ss + random.choice(base)
        lst.append(ss)

    s1 = time.time()
    map(loop,lst)
    print "loop: ",time.time() - s1
    print '*'*20
    s1 = time.time()
    map(regular, lst)
    print "regular: ", time.time() - s1
    print '*' * 20
    s1 = time.time()
    map(str_tran, lst)
    print "str_tran: ", time.time() - s1
    print '*' * 20
    s1 = time.time()
    map(filter_mt, lst)
    print "filter_mt: ", time.time() - s1
    print '*' * 20
    s1 = time.time()
    map(list_com, lst)
    print "list_com: ", time.time() - s1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值