day03-python字符串
1. 字符串简介
Python字符串—一个有序的字符集合,用于存储和展现基于文本的信息。
从功能的角度来看,字符串可以用来表示能够像文本那样编辑的任何信息:符号和词语,载入到内存中的文本文件的内容、Internet网址和Python程序等。他们可以用来存储字节的绝对二进制值,以及在国际化程序中用到的Unicode。
严格来说,Python的字符串实际上是一个不可变的序列,意思是字符串是不能修改的,和列表以及元祖一样。
2. 字符串常量
其实Python中的字符串使用的多了的话感觉还是很方便的,只要理解了它的各种编写方式和代表的含义。例如主要是如下几种:
- 单引号:‘span”fff’
- 双引号:“span’fff”
- 三引号:’’’…span…’’’
- 转义字符:”s\tm\na\0om”
- Raw字符串:r’ D:\blog\Python’
- Byte字符串:b’sp\x01jn’
3. 单双引号字符串
在Python字符串中,单引号和双引号的作用是一样的,返回相同类型的对象
4.索引和切片
字符串是字符的有序集合,所以可以通过位置获取相应的元素。而在Python中,字符串中的字符是通过字符提取的。
和其他的语言一样,Python的偏移量是从0开始的,比字符串的长度小1。但是Python还支持使用负偏移量获取元素,是从结束的地方反向计数。
4.1 索引(s[i])获取特定偏移的元素
第一个元素的偏移量为0,s[1]获取的是第2个元素。负偏移意味着从末尾开始计数,s[-i]获取的是倒数第i个元素。
s = 'abcdefg' print('结果是:',s[1],s[0],s[-1]) #结果是: b a g
4.2 分片(s[i:j])提取特定的一部分作为序列
上边界(j)并不包含在内,如s[1:4]获取的是从偏移量1开始,但不包括偏移量4的元素。
s = 'abcdefg' print('结果是:',s[1:4]) #结果是: bcd
s[1:]获取的是从1开始到末尾结束之间的元素。
s = 'abcdefg' print('结果是:',s[1:]) #结果是: bcdefg
s[:4]获取从0开始但不包括4的元素。
s = 'abcdefg' print('结果是:',s[0:4]) #结果是: abcd
s[:-1]从0开始但不包括最后一位的元素。
s = 'abcdefg' print('结果是:',s[:-1]) #结果是: abcdef
s[:]获取整个序列,实现顶层拷贝(有相同值,但是是不同的对象)。
s = 'abcdefg' print('结果是:',s[:]) #结果是: abcdefg
4.3 分片拓展
在Python2.3以后,分片表达式增加了可选的第三个索引,用作步进。而完整的分片表达式为s[i:j:k],意思是从偏移量i到j-1,每隔k个元素索引一个元素。
s = 'abcdefg' print(s[1:7:2]) #bdf print('反转s字符串:',s[::-1]) #反转s字符串: gfedcba
5. 字符串转换工具
1. int()函数将字符串转化为数字。
print('将字符串转化为数字:',int('213'),type(int('213'))) #将字符串转化为数字: 213 <class 'int'>
2. str()函数将数字转化为字符串。
print('将数字转化为字符串:',str(213),type(str(213))) #将数字转化为字符串: 213 <class 'str'>
3. float()函数将字符串转化为浮点数。
print('将字符串转化为浮点数:',float('213'),type(float('213'))) #将字符串转化为浮点数: 213.0 <class 'float'>
4. ord()函数将单个字符串转化为对应的ACIⅡ码(是单个字符)。
print('将单个字符串转化为对应的ACIⅡ码:',ord('c')) #将单个字符串转化为对应的ACIⅡ码: 99
5. chr()函数将ACIⅡ码转化为对应的字符。
print('将ACIⅡ码转化为对应的字符:',chr(88)) #将ACIⅡ码转化为对应的字符: X
6. 修改字符串
前面说过字符串其实是一个不可变的序列,而不可变的意思就是不能在原地修改一个字符串,如下:
s = 'span' s[0] = 'e' 弹出错误信息:TypeError: 'str' object does not support item assignment
如果要修改一个字符串,必须要使用合并、分片以及replace()方法来赋值给一个新的字符串。
s = 'span' print('合并:',s + 'lol') #合并: spanlol print('分片:',s[:3] + 'lol' + s[:]) #分片: spalolspan print('repalce()方法:',s.replace('pa','lol')) #repalce()方法: sloln
7.字符串格式化
7.1 在%操作符的左侧放置一个一个需要格式化的字符串,字符串中带有一个或者多个需要转换的目标。在%操作符的右侧放置一个元祖对象,会一一对应到相应的位置上去。
a = 'my name is %s,I am %d age' % ('Tom',16) print(a) #my name is Tom,I am 16 age
7.2 字符串的格式化同时也允许左边的转换目标引用右边字典中的键来提取相应的值。
a = 'my name is %(name)s,I am %(age)d age' % {'name':'Tom','age':16} print(a) #my name is Tom,I am 16 age
7.3 format方法
a = 'my name is {},I am {} age'.format('Tom',16) print(a) #my name is Tom,I am 16 age a = 'my name is {0},I am {1} age'.format('Tom',16) print(a) #my name is Tom,I am 16 age a = 'my name is {name},I am {age} age'.format(name='Tom',age=16) print(a) #my name is Tom,I am 16 age a = 'my name is {name},I am {age} age'.format_map({'name':'Tom','age':16}) print(a) #my name is Tom,I am 16 age
8.字符串方法
msg = 'spanDelter' print('首字母大写:',msg.capitalize()) # 首字母大写: Spandelter print('大写变小写:',msg.casefold()) # 大写变小写(单个字符): spandelter print('center:',msg.center(40,'*')) # center: ***************spanDelter*************** print('字符e字符串中出现的次数:',msg.count('e')) # 字符e字符串中出现的次数: 2 print('将字符串编码成bytes格式:',msg.encode(encoding='utf-8')) # 将字符串编码成bytes格式: b'spanDelter' print('判断字符串是否以ter结尾:',msg.endswith('ter')) # 判断字符串是否以ter结尾: True print('查找字符,找到返回第一个索引,找不到返回-1:',msg.find('w'),msg.find('p')) # 查找字符,找到返回第一个索引,找不到返回-1: -1 1,rfind()方法是查找字符最后出现的位置 print('是否是阿拉伯数字:','d'.isalnum()) # 是否是阿拉伯数字: True。 print('是否是纯英文字符:',msg.isalpha()) # 是否是纯英文字符: True print('是否为10进制:',msg.isdecimal()) # 是否为10进制: False print('是否为整数:',msg.isdigit()) # 是否为整数: False print('判断是否为合法的变量名:',msg.isidentifier()) # 判断是否为合法的变量名: True print('首字母是否大写:',msg.istitle()) # 首字母是否大写: False print('判断是否为空格:',' '.isspace()) # 判断是否为空格: True print('判断是否可打印:',msg.isprintable()) # 判断是否可打印: True print('判断是否都为大写:',msg.isupper()) # 判断是否都为大写: False print('判断是否都为小写:',msg.islower()) # 判断是否都为小写: False print('将序列(列表)变成字符串:',','.join(['wl','lhc','wtx','wjy']),type(','.join(['wl','lhc','wtx','wjy']))) #将序列(列表)变成字符串: wl,lhc,wtx,wjy <class 'str'> print('将序列(元祖)变成字符串:','.'.join(('wl','lhc','wtx','wjy')),type(','.join(('wl','lhc','wtx','wjy')))) #将序列(元祖)变成字符串: wl.lhc.wtx.wjy <class 'str'> print('将字符串转化为小写:',msg.lower()) # 将字符串转化为小写: spandelter #print('啥意思不知道:',msg.maketrans()) print('根据指定的分隔符将字符串进行分割:',"www.runoob.com".partition('.')) # 根据指定的分隔符将字符串进行分割: ('www', '.', 'runoob.com') print('将字符串msg中的字符s替换为字符w:',msg.replace('s','w')) # 将字符串msg中的字符s替换为字符w: wpanDelter print('将字符串转化为列表:',msg.split()) # 将字符串转化为列表: ['spanDelter'] print('去除两边空格:',msg.strip()) # 去除两边空格: spanDelter(作用非常大) print('大小写互换:',msg.swapcase()) # 大小写互换: SPANdELTER print('首字母大写:',msg.title()) # 首字母大写: Spandelter print('小写变成大写:',msg.upper()) # 小写变成大写: SPANDELTER print('长度30,前面不够的用0补齐:',msg.zfill(30)) # 长度30,前面不够的用0补齐: 00000000000000000000spanDelter