请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生

【每日一坑 3】 找数字

[复制链接]

0

主题

0

好友

16

积分

新手上路

Rank: 1

发表于 2013-12-18 16:53:16 |显示全部楼层
  1. text = "aAsmr3idd4bgs7Dlsf9eAF"
  2. new_text = filter(lambda x: x.isdigit(), text)
复制代码
回复

使用道具 举报

0

主题

0

好友

19

积分

新手上路

Rank: 1

发表于 2013-12-18 17:50:58 |显示全部楼层
def filter_digit_from_string(text):
    return ''.join([i for i in text if i.isdigit()])
回复

使用道具 举报

0

主题

0

好友

19

积分

新手上路

Rank: 1

发表于 2013-12-18 17:58:01 |显示全部楼层
def filter_digit_from_string(text):
    return ''.join([i for i in text if i.isdigit()])
回复

使用道具 举报

0

主题

0

好友

389

积分

中级会员

Rank: 3Rank: 3

发表于 2013-12-18 22:24:03 |显示全部楼层
参考zeq同学,输出字母版
  1. text = 'aAsmr3idd4bgs7Dlsf9eAF'
  2. new_text = filter(lambda x: x.isalpha(), text)
复制代码
回复

使用道具 举报

0

主题

0

好友

65

积分

注册会员

Rank: 2

发表于 2013-12-19 01:07:56 |显示全部楼层
  1. import re
  2. import string

  3. text = "aAsmr3idd4bgs7Dlsf9eAF"

  4. list1 = re.findall( "\d", text)

  5. print ''.join(list1)
复制代码
回复

使用道具 举报

0

主题

0

好友

83

积分

注册会员

Rank: 2

发表于 2013-12-19 12:31:39 |显示全部楼层
text = 'aAsmr3idd4bgs7Dlsf9eAF'
for i in text :
        if '0' <= i <= '9':
                print i,
回复

使用道具 举报

1

主题

0

好友

120

积分

注册会员

Rank: 2

发表于 2013-12-19 15:16:27 |显示全部楼层
  1.   1 #!/usr/bin/env python
  2.   2 #coding:utf-8
  3.   3
  4.   4 text = "aAsmr3idd4bgs7Dlsf9eAF"
  5.   5 s = ''
  6.   6 for i in range(0,len(text)-1):
  7.   7     try:
  8.   8         int(text[i])
  9.   9         s += text[i]
  10. 10     except ValueError:
  11. 11         pass
  12. 12 print s
复制代码
回复

使用道具 举报

0

主题

0

好友

134

积分

注册会员

Rank: 2

发表于 2013-12-21 00:41:29 |显示全部楼层
代码要简短,运行时间也很重要嘛~测试了一下运行时间,1000000次的测试正则要比遍历快5秒,不知道有没有更快的方法~
  1. import re
  2. from functools import partial#给函数传入参数的模块,具体还有什么作用也不清楚
  3. from timeit import Timer#python专用测试时间模块
  4. class C:#定义一个类,里面包含了从字符串取出数字的两个方法
  5.     def bianli(self,string):#遍历
  6.         dit=[]
  7.         for i in string:
  8.             if i.isdigit():
  9.                 dit.append(i)
  10.         new=''.join(dit)
  11.     def zhengze(self,string):#正则表达式
  12.         ne=re.findall(r'[\d|.]',string)

  13. if __name__=='__main__':
  14.     string = raw_input('string:')
  15.     bas=C()
  16.     t_bianli=Timer(partial(bas.bianli,string))#传入参数默Timer对象,第一个参数为需要测试的语句partial使得语句能够传入参数
  17.     t_zhengze=Timer(partial(bas.zhengze,string))
  18.     print t_bianli.timeit()#调用方法timeit默认运行100000次输出计算时间
  19.     print t_zhengze.timeit()
  20.     print t_bianli.repeat()#调用repeat方法默认测试3次,每次一百万次
  21.     print t_zhengze.repeat()
复制代码
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-12-21 21:22:28 |显示全部楼层
scz_000 发表于 2013-12-21 00:41
代码要简短,运行时间也很重要嘛~测试了一下运行时间,1000000次的测试正则要比遍历快5秒,不知道有没有更 ...

有意思。
如果正则compile之后再查找,应该会更快
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

134

积分

注册会员

Rank: 2

发表于 2013-12-22 19:57:25 |显示全部楼层
crossin先生 发表于 2013-12-21 21:22
有意思。
如果正则compile之后再查找,应该会更快

应该怎么compile。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-3-29 14:17 , Processed in 0.026714 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部