python 内置数据类型之字符串
1.3 字符串
字符串本身就是一个有序(从左至右)的字符的集合。是序列这种类型的一种,后面还要学习列表与元组。 在这一节中,需要了解字符串的定义,特殊字符,转义与抑制转义;字符串基本操作、格式化等。 先看下面表格,本节学习的主要内容就在下面的表格中:
| 分类 | 操作 | 解释 | python2.6 | python 3.0 |
|---|---|---|---|---|
| 定 | s='' | 定义空字符串 | ||
| 义 | s="halberd's",'halberd\'s' | 使用单引号或者双引号定义字符串 | ||
| s="""…""" | ||||
| s=''' …''' | 三重引号定义多行字符串 | |||
| s=r'\temp\halberd' | 定义raw字符串,取消转义 | |||
| s=b'halberd' | python3.0 开始出现,定义字节字符串 | N | ||
| s=u'halberd' | 仅在python2.6中使用unicode字符串 | N | ||
| 字 | s1 + s2 | 字符串合并 | ||
| 符 | s1 * n | 重复 n 次 | ||
| 串 | s[i] | 使用字符串索引,i>=0,为整数。 | ||
| 操 | s[i:k] | 字符串分片,取出从i到k的内容 | ||
| 作 | len(s) | 取字符串的个数 | ||
| s.find('ha') | 返回匹配到的内容的索引值 | |||
| s.[l | r]strip() | 移除(左 | 右)左右两边的空格 | |||
| s.replace | 字符替换 | |||
| s.split(',') | 指定分隔符将字符串进行分隔(分隔后变为列表) | |||
| s.isdigit() | 判断是否为整数 | |||
| s.upper()/s.lower() | 大小写转换 | |||
| s.endswith('value') | 匹配字符串结尾 | |||
| s.join(strlist) | 在strlist中以s为分隔符将s插入各个字符之间 | |||
| s.encode('utf8') | 指定编码 | |||
| 'a' in 'b' | 判断 a 是否包含于b | |||
| 格 | "a %s parrot" % kind | 字符串格式化表达式 | ||
| 式 | ”a {0} parrot".format(kind) | 字符串格式化方法 | ||
| 化 | ||||
| 迭 | [c*2 for c in s] | 迭代,把S中的字符逐一重复2次,并将结果转换为列表 | ||
| 代 | map(ord,s) | 将字符串s中的值逐一传入函数ord(用于置换为ASCII),map把计算结果以列表形式返回结果 |
- NOTE:
- 在python中,单引号与双引号的作用是一样的。
-
- 转义及特殊字符
在编写程序的过程中难免会遇到使用特殊字符的情况。对特殊字符的转义及抑制转义需要有所了解。 python中的转义符是 "/" . 可以通过转义符将特殊字符转义,使特殊字符以字符串本身存在。也可以在定义字符串时 通过关键字母 r 来定义为raw-string,如 s=r'halberd\n' ,这种写法,"\n" 会以字符串本身存在,不代表任何特殊意义。
Table 5: 特殊字符及转义符使用示例 示例 意义 \\ 保留\ \' 保留' \" 保留” \a 响铃 \b 退格,删除前面一个字符 \f 换页 \n 新起一行 \t 横向制表符 \v 垂直+横向制表符,以上一行为基准 \0 NULL(不是字符串结尾) \o 八进制 \x 16进制 \U unicode 32位的16进制 \u Unicode 16位的16进制 -
- 索引和分片
字符串索引的表示方法为:s[i], s 为字符串变量、常量,i代表索引序号。假设字符串变量s的值被定义为'halberd',即(s='halberd'),则将该值的内容想像为:
h a l b e r d 0 1 2 3 4 5 6 -7 -6 -5 -4 -3 -2 -1 索引的序号与实际的字符串中字符对应关系如上。i=0 ,代表了字符串从左至右数第一个字符,当从左至右对应字符串索引时,序号i的取值范围为0 –> len(s)-1。 i = -1时,从右至左对应字符串索引,i 的取值范围为 -len(s) –> -1.
分片的表示方法为: s[i:j:n]或者s[slice(i,j,n)],取出字符串的索引序号范围为大于等于i 并且小于j, 由前两个参数确定 取值范围后,从第一个值开始,以N 为间隔进行取值。如果n 为负数,则值的显示顺序与原字符串的排列顺序相反。第三个参数 n 可以省略,默认为1. 第二个参数可省略,默认为最后一个字符。
- 字符串格式化
-
如今python 中有两路方法来实现字符串格式化: 表达式/ 格式化方法调用。 表达式是python 诞生以来就存在的,而方法调用则是从python2.6开始的。先从表达式开始。 在了解格式化的具体方法之前,先来了解下转换目标。 所谓的转换目标就是要把我们需要的值代入的位置(可以理解为占位符):
Table 6: 转换目标 置换目标 意义 s 字符串 r s,但是使用的是repr,而不是str c 字符 d 十进制整数 i integer,整数 u unsigned integer,无符号整数 o 八进制整数 x 十六进制整数 X x,输出时为大写 e 浮点指数 E e,输出时为大写 f 浮点十进制数 F f,输出时为大写 g e/f G E/F % 常量% 转换目标的结构如下: %[(name)][flags][width].[precise]typecode
%[(name)][stuff-things][position][width].[precise]typecode
其中(name) 需要与字典配合使用,与字典中的name 对应,待学习字典后有更明确的了解。
flags可以有+,-,=,^,' '或0。+表示右对齐。-表示左对齐,=代表一个标记字符后的补充,^ 代表居中。' '为一个空格,表示在正数的左侧填充一个空格,为默认方式, 从而与负数对齐。0表示使用0填充。
width 表示整数部分(包含一切字符)+小数点+小数 各部分字符个数最大显示个数。
precision表示小数点后精度
[ ]表达式 格式以% 为分隔,左侧为包含占位符(%d %s 等)的内容,%右侧为占位符对应的值 。'That is %d %s birds!' % (1,dead)
’That is %05.2d %s birds!' % (1,dead) -- 试试将05改为5, 将d 改为f 会有什么结果
'That is %(num)05.2d %(stat)s birds!' % {"stat":'dead',"num":1} -- 试试将单引号去掉,将双引号去掉如果在运行时才能计算得出width.precise ,那么可以一预定义格式的时候,在width 与precise 位置上用* 代替. 如: '%f,%.2f,%*.*f' % (1/3.,1/3.,2,4,1/3.)
一个* ,按出现顺序,要在 % 后面相应顺序位置提供值。 像上面的示例,width = 2 ,precise = 4. 最后一个1/3. 为%*.*f 的值。
[ ]方法调用 方法调用,使用的是string.format 来实现。在string 所代表的字符串中,可以使用{n}(位置参数)或者{key}(名称参数) 作为替换目标。结构: 参数书写格式为:{key:[填充字符][对齐方式][宽度][.精度][数据类型]} '参数'.format('value1',key1='value',…….)
示例:
>>> '{motto},{0},{1},{food}'.format(1,2,motto='3.14',food=[1,2])
'3.14,1,2,[1, 2]'其中{n}(位置参数) 中,n>=0. {0} 代表{n}中的第一个参数,{1}代表第二个可取参数。 {key}(关键字参数) 与 key=value格式中的key 要一一对应。{n}的值不能在key=value格式中取值。
- note
- 位置参数值不得在名称参数值之后 。
[ ](no term)- 位置参数 示例:
>>> s=['halberd',18]
>>> x='My name is {0:10s}, {1:-=10d} years old.'
>>> x.format('halberd',18)
'My name is halberd , --------18 years old.'
''' 注意下面写法。将列表中的值作为参数值传入字符串参数中。在指向列表的变量前加*
'''
>>> 'My name is {}, {} years old.'.format(*s) ''' 注意此种写法: *变量名'''
'My name is halberd, 18 years old.' [ ](no term)- 关键字参数 示例:
>>> x='My name is {name},{age} years old. I\'ve been HZ for {0} years.'
>>> x.format(8,name='halberd',age=18)
"My name is halberd,18 years old. I've been HZ for 8 years."
s={'name':'halberd','age':18,8}
''' 注意下面用法. 将字典值作为参数值传入。在字典变量前加** 即可。因为关键词有对应关系,书写顺序对值的对应无影响
'''
>>> s={'age':18,'name':'halberd','year':8}
>>> x='My name is {name},{age} years old. I\'ve been HZ for {year} years.'
>>> x.format(**s)
"My name is halberd,18 years old. I've been HZ for 8 years." [ ]填充与格式化- 对齐方式有:
- < 左对齐
- > 右对齐
- = 一个标记字符后的补充(右对齐)
- ^ 居中
对比下下面不同的对齐方式。
>>>s={'age':18,'name':'halberd','year':8}
>>>'''居中对齐'''
'居中对齐'
>>> x='My name is {name},{age:-^10} years old. I\'ve been HZ for {year} years.'
>>> x.format(**s)
"My name is halberd,----18---- years old. I've been HZ for 8 years."
>>> '''左对齐'''
'左对齐'
>>> x='My name is {name},{age:-<10} years old. I\'ve been HZ for {year} years.'
>>> x.format(**s)
"My name is halberd,18-------- years old. I've been HZ for 8 years."
>>> x='My name is {name},{age:+=10} years old. I\'ve been HZ for {year} years.'
>>> x.format(**s)
"My name is halberd,++++++++18 years old. I've been HZ for 8 years."
>>> '''右对齐'''
'右对齐'
>>> x='My name is {name},{age:->10} years old. I\'ve been HZ for {year} years.'
>>> x.format(**s)
"My name is halberd,--------18 years old. I've been HZ for 8 years."
[ ]精度与进制 调用format方法,不能将整数值格式化为浮点数。但是可以转换为其他进制。 字符串不能转换为其他进制。# 精度控制
>>> s=3.1415926
>>> x='Pi is {:.4f}'
>>> x.format(s)
'Pi is 3.1416'
>>> # 进制转换
...
>>> x='My name is {name},{age:-^10o} years old. I\'ve been HZ for {year} years.'
>>> x.format(**s)
"My name is halberd,----22---- years old. I've been HZ for 8 years."
python 内置数据类型之字符串的更多相关文章
- Python内置数据类型总结
python的核心数据类型:(很多语言之提供了数字,字符串,文件数据类型,其他形式的数据类型都以标准库的形式表示 也就是用之前需要import ) ,但是python有很多都是内置的,不需要impor ...
- Python内置数据类型之Dictionary篇
1.查看函数XXX的doc string. Python的函数是有属性的,doc string便是函数的属性.所以查看函数XXX的属性的方法是模块名.XXX.__doc__ 2.模块的属性 每个模块都 ...
- python 内置数据类型之数字
目录: 1.2. 数字 1.2.1. 数字类型 1.2.2. 浮点数 1.2.3. 进制记数 1.2.4. 设置小数精度 1.2.5. 分数 1.2.6. 除法 1.2 数字 1.2.1 数字类型 ...
- Python内置数据结构之字符串str
1. 数据结构回顾 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于字符串,但是字符串是不可变序列,因此所有的元素赋值和切片赋值都是非法的. >>> ...
- python内置数据类型-字典和列表的排序 python BIT sort——dict and list
python中字典按键或键值排序(我转!) 一.字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序. Py ...
- Python内置数据类型之Tuple篇
Tuple 是不可变的 list.一旦创建了一个 tuple,就不可以改变它.这个有点像C++中的const修饰的变量.下面这段话摘自Dive Into Python: Tuple 比 list 操作 ...
- Python内置数据类型之List篇
List的定义: li = ["one" , "two" , "three" , "four"] List是一个有序的集 ...
- Python中内置数据类型list,tuple,dict,set的区别和用法
Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...
- Python的四个内置数据类型list, tuple, dict, set
Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...
随机推荐
- 20165237 2017-2018-2 《Java程序设计》第4周学习总结
20165237 2017-2018-2 <Java程序设计>第4周学习总结 教材学习内容总结 1.子类只能有一个父类,父类可以有多个子类. 2.子类继承父类的成员变量和方法. 3.开闭原 ...
- MyBatis-进阶1
接入门的实例,我们知道MyBatis可以使用注解和配置文件实现接口和sql语句的绑定. 那么一个接口方法同时使用注解和xml配置会怎么样. @Select("select * from us ...
- 【ARTS】01_20_左耳听风-20190325~20190331
zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...
- Iterables vs. Iterators vs. Generators
Reprinted from: Iterables vs. Iterators vs. Generators Occasionally I've run into situations of conf ...
- Learning Discriminative Features with Class Encoder
近来论文看了许多,但没多少时间总结下来.今天暂时记录一篇比较旧的论文,选择理由是 Discriminative features. 做图像说白了就是希望有足够有判别性的特征,这样在分类或者匹配.检索的 ...
- Faster_RCNN 3.模型准备(下)
总结自论文:Faster_RCNN,与Pytorch代码: 本文主要介绍代码第二部分:model/ , 首先分析一些主要理论操作,然后在代码分析里详细介绍其具体实现. 首先在参考文章的基础上进一步详细 ...
- LwIP Application Developers Manual6---Application API layers
1.前言 lwIP提供3种应用编程接口来跟TCP/IP内核通信,如下所示: 低水平的内核/回调或raw API 2个高水平序列API: 1) netconn API 2) socket API(为了兼 ...
- 设计模式C++学习笔记之九(Template Method模板方法模式)
模板模式也是相当简单的一种模式,而且是比较常用的.模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些 ...
- linux快速将磁盘额外空间扩展到某一挂载点
由于之前在创建用户时,为该用户目录分配的空间只有5G,在后续的开发,存放的东西越来越多,空间眼看就不够用了,网上查了一下,很多都是教我们将其余挂载点分配过多的空间分配到空间不足的挂载点,步骤还不算太复 ...
- $Django 多对多-自定义第三张表 基于双下划线的跨表查询(补充)
自定义第三张表的好处:可以定义多个字段, 缺点:查询不方便(有方法解决) 1.第三张表设置外键,联合唯一(查询不方便) class Books(models.Model): name=models.C ...