设为首页 收藏本站
查看: 1533|回复: 0

[经验分享] Python中数据结构之字符串:每种语言必重点讲授的难点内容

[复制链接]

尚未签到

发表于 2015-4-21 06:42:21 | 显示全部楼层 |阅读模式
  字符串是不可变的序列,序列的标准操作(索引、分片、乘法、判断成员资格、求长度、取最大值和最小值)依然适合与字符串。
  1、格式化字符串,字符串格式化操作符”%”:
  >>>format = “Hello , %s. %s enough for ya”
  >>>values = (‘world’,'Hot’)
  >>>print format % values
  Hello, world. Hot enough for ya?
  “%s”被称为转换说明符,标记了需要插入转换值的位置,’s'表示值会被格式化为字符串(若原有值不是字符串会调用str将其转换为字符串),这个方法适合于大多数的值,如果要在格式化字符串中包含百分号则最好写成”%%”形式,例如:”%%s”。
  格式化操作符右操作数可以为任意内容,但如果是元组或映射类型(如:字典),则字符串格式化方式略有不同。如果格式化操作数为元组,则元组中的每个元素都会被单独格式化,每一个值都需要一个对应的转换符(如上例)。一般的如下:
  >>> print ‘%s good afternoon!’ % ['lily']  
  ['lily'] good afternoon!
  基本的转换说明符包括以下几个部分,这些项的顺序必须规范:
  (1)”%”字符,标记转换说明符的开始。
  (2)转换标记(可选):”-”表示左对齐,”+”表示在转换数值前加上相应的正负号,” “空白表示正数前保留空格,”0″表示转换值若位数不够则用0填充。
  (3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度,如果用’*'标志则宽度值会从元组中读取。
  (4)点”.”后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数,如果转换的是字符串,则该数字表示最大字段宽度,如果用”*”代替,则精度值将从元组中读取。
  (5) 转换类型,即例如’%%s’中的’s':
  d,i:带符号的十进制整数
  o:不带符号的八进制
  u:不带符号的十进制
  x:不带符号的十六进制(小写),X:表示大写
  e:科学计数法表示的浮点数(小写),E:表示大写
  f,F:十进制浮点数
  g:如果指数大于-4或小于精度值则同e,其他同f
  G:如果指数大于-4或小于精度值则同E,其他同F
  C:单个字符,接受整数或者单字符的字符串
  r:字符串(使用repr转换任意Python对象)
  s: 字符串(使用str转换任意Python对象)
  举例:
  >>> from math import pi
  >>>’%010.2f’ % pi#表示字段宽度为10,使用0进行空位填充,精度为2的十进制浮点数
  ’0000003.14′
  >>>print (‘%5d’ % 10) +’\n’ + (‘%5d’ % -10)#5表示字符宽度为5,右对齐的十进制整数
  10
  -10
  >>>print (‘%+5d’ % 10) +’\n’ + (‘%+5d’ % -10)
  +10
  -10
  >>>’using str: %s’ % 42L
  ‘using str: 42′
  >>>’using repr: %r’ % 42L
  ‘using repr: 42L’
  >>>’%.*s’ % (5,’Guido Van Rossum’)
  ‘Guido’
  
  2、另一种字符串格式方法——模板字符串,工作方式类似于Unix shell中的变量替换,如下substitute模板方法用传递进来的关键字参数替换字符串中$打头的变量:
  >>>from string import Template
  >>>s = Template(‘$x, glorious $x!’)
  >>>s.substitute(x=’good’)
  ‘good, glorious good!’
  #如果替换字段是单词的一部分内容,则参数名必须用括号括起来,从而正确指明结尾:
  >>>s = Template(“It’s ${}tastic!”)
  >>>s.substitute(x=’fan’)
  “it’s fantastic!”
  #要插入美元符号则需要使用$$:
  >>>s = Tempalate(“Make $$ selling $x!”)
  >>>s.substitute(x = ‘goose’)
  ‘Make $ selling goose!’
  #使用字典变量提供值或名称对:
  >>>s = Template(‘A $thing must never $action. ‘)
  >>>d={‘thing’:'gentleman’,'action’:'show his socks’}
  >>>s.substitute(d)
  ‘A gentleman must never show his socks. ‘
  3、常用的字符串方法介绍
  先介绍string中常见的字符串常量:
  string.digits:包含数字0~9的字符串
  string.letters:包含所有字母(大写小写)的字符串
  string.lowercase:包含所有小写字母的字符串
  string.printable:包含所有可打印字符的字符串
  string.punctunation:包含所有标点的字符串
  string.uppercase:包含所有大写字母的字符串
  #注:Python3.0后string.letters和其他相关内容已被移除,都只能使用string.ascii_letters这种类型常量替代。
  1. find方法在字符串中查找字符串并返回子串所在位置的最左端索引,若未找到则返回-1
  >>>’With a moo-moo here,and a moo-moo there’.find(‘moo’)
  7
  >>>”a b c d a d e !”.find(‘f’)
  -1
  >>>”a b c d a d e”.find(‘a’,1,9)#find同时支持提供搜索的起点(1)和终点(9)
  8
  #其他部分的常见可支持起点和终点的方法:rfind,index,rindex,count,startwith,endwith
  2. join方法,是split方法的逆方法,在队列中添加元素:
  >>>seq = [1,2,3,4,5]
  sep = ‘+’
  sep.join(seq)#连接数字列表,结果出错
  >>>seq = ['1','2','3','4','5']
  >>>sep.join(seq)#连接字符串列表
  ’1+2+3+4+5′
  >>>dir = ‘ ‘, ‘usr’, ‘bin’, ‘env’
  >>>’/’.join(dirs)#连接字符串元组
  ‘ /usr/bin/env’
  >>>print ‘C: ‘ + ‘\\’.join(dirs)
  C: \usr\bin\env
  #被插入的目标队列元素都必须是字符串
  3. lower方法返回字符串的小写字母版:
  >>>’A and B’.lower()
  ‘a and b’
  >>>names = ['liu','zhang','li']
  >>>if raw_input(“Enter your name: “).lower() in names: print ‘Found it!’
  Enter your name: Liu
  Found it!
  #类似或相关方法:islower、capitalize、swapcase(切换字符串大小写)、title、istitle、upper、isupper。
  标题转换方法title:
  >>>’that\’s all folks’.title()
  ‘That’S All Folks’
  string模块的capwords函数:
  >>>import string
  >>>string.capwords(‘that\’s all folks’)
  ‘That’s All Folks’
  4. replace方法,返回字符串的所有匹配项被替换后得到的字符串:
  >>>’This is a test’.replace(‘is’,'eez’)#查找并替换
  >>>’Theez eez a test’
  5. split方法,join的逆方法,用于将字符串分割成列表。
  >>>’1+2+3+4+5′.split(‘+’)#分隔符为’+’
  ['1','2','3','4','5']
  #注:如果不提供分隔符,程序默认将空格作为分隔符(空格,制表符和换行等)
  类似方法:rsplit、splitlines。
  6. strip方法返回去除两侧(不包括字符串内部)空格的字符串:
  >>>’    good luck!      ’.strip()
  ‘good luck!’
  #和lower共用可比对输入和存储的值。
  >>>names = ['liu','zhang','li']
  >>>if (raw_input(“Enter your name: “).lower()).strip() in names: print ‘Found it!’
  Enter your name:          Liu
  Found it!
  #还可以指定需去除的字符,只需将这些字符列为参数:
  >>>’****Spam * for * everyone!!! ***’.strip(‘ *!’)
  ‘Spam * for * everyone’
  类似方法:lstrip、rstrip。
  7. translate方法,类似于replace方法,替换字符串的某些部分内容,但该方法只处理单个字符,优势在于可同时进行多个字符替换,部分情况下效率较replace高的多。可用于替换换行符或者其他和平台相关的特殊字符等,这里使用将纯正英文文本替换为德国口音为例,需要把字符c和s替换为k和z。
  s使用translate前要先完成一张转换表,转换表中描述了以某字符替换某字符的对于关系,由于该表(实际为字符串)有多达256个项目,为了简便,我们使用string模板里面的maketrans函数操作。maketrans函数接受两个参数,两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换:
  >>>from string import maketrans
  >>>table = maketrans(‘cs’,'kz’)#转换表中256项目都有
  >>>len(table)
  256
  >>>table[97:123]#26个小写英文字母的ascii位置
  ‘abkdefghijklmnopqrztuvwxyz’#替换后的结果
  >>>maketrans(”,”)[97:123]#显示原始内容
  
  ‘abcdefghijklmnopqrstuvwxyz’
  
  #表创建完后可用做translate方法的参数进行字符串的转换:
  >>>’this is a incredible test’.translate(table)
  ‘thiz iz a inkredible tezt’
  #translate方法的第二个参数为可选项,用于指定需要删除的字符,例如想要模拟一句语速超快的德国语,可以删除所有空格:
  >>>’this is a incredible test’.translate(table,' ')
  ‘thizizainkredibletezt’
  #对于非英语字符串的问题,可能并不能使用lower转换,比如挪威大写转换成小写,此时需要使用translate转换,有时使用Unicode可能也能解决问题。
  http://www.tebik.com/?p=209

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58973-1-1.html 上篇帖子: Python学习系列 下篇帖子: 使用python模拟登陆百度
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表