一、字符串(str)
1.字符串在python2版本中为一个byte序列,在python3版本中为一个unicode序列,并且字符串是不可变的。
sr = str()
sr = 'string'
sr = str() print(type(sr)) #结果:<class 'str'>
2.字符串也支持切片操作,所以与列表和元组一样。
sr = 'hello world' print(sr[2:]) #结果:llo world
3.在python3版本中可以直接操作汉字,因为是一个unicode序列
sr = '你好 世界' print(sr[0]) #结果:你
4.字符串的属性和方法
- capitalize()方法将字符串的首字母大写。
- title()方法是将所有单词的首字母大写。
- lower()方法是将所有字母变成小写。
- upper()方法是将所在字母变成大写。
- swapcase()方法是将原来小写字母变成大写,原来大写字母变成小写。
- center()方法按照指定的宽度居中字符串,默认用空格填充,也可以指定填充字符。
- ljust()方法字符串左对齐,不足指定宽度时用指定字符填充(默认是空格填充)
sr = 'hello birld' print(sr.ljust(80,'#'))
#结果:hello birld#####################################################################
- rjust()方法是将字符串右对齐,不足指定宽度时用指定字符填充(默认是空格填充)
- zfill()方法指定字符串的宽度,不足时前导用0填充。
sr = 'hello birld' print(sr.zfill(20)) #结果:000000000hello birld
- strip()方法是删除首尾指定的字符(默认是空白字符)。
sr = 'ahello birlda' print(sr.strip('a')) #结果:hello birld
- lstrip()方法是删除左边指定的字符(默认是空白字符)。
- rstrip()方法是删除右边指定的字符(默认是空白字符)。
- startswith()方法指是否以指定字符串开始,返回一个bool值。也可以指定查找的索引范围。
sr = 'hello birlda' print(sr.startswith('he')) #结果:True
- endswith()方法指是否以指定字符串结尾,返回一个bool值。
- count()方法指查找指定的子字符串在字符串的出现多少次。
- find()方法指最近出现的索引位置。在字符串中查找不到时,返回-1
- rfind()方法指从右向左最近出现的索引位置。
- index()方法指最近出现的索引位置。在字符串中查找不到时,抛出一个ValueError异常。
- replace()方法指用新子字符串替换指定的子字符串。也可以指定要替换的次数。
- join()方法把一个可迭代对象进行连接。
lt = ['how', 'are', 'you'] print(' '.join(lt)) #结果:how are you
#python中可以用加号连接两个字符串,但这种效率很低,因为会生成一个新的字符串,所以不建议加号操作。
- 字符串格式化
字符串在python中有两种格式化方式:
1.print
- %d、%i表示整数
- %u表示无符号整数
- %o表示八进制
- %x、%X表示十六进制
- %e、%E表示科学计数法
- %f、%F表示浮点数
- %c表示单个字符
- %s表示一个字符串,也可以是一个类的__str__方法
- %r表示一个字符串,也可以是一个类的__repr__方法
- %a转换为一个ASCII值
用元组形式格式化 print('How are you %s' %('orna',)) #当反复出现,或者格式化的内容很多时,可以用字典形式格式化 print('How are you %(name)s' %{'name':'orna'}) print('%(name)s say:How are you %(name1)s' %{'name':'orna','name1':'luscy'})
class A: def __str__(self): return 'str' def __repr__(self): return 'repr' a = A() print('%r' % (a,)) #结果为:repr print('%s' % (a,)) #结果为:str
2.format
format方法接受多个可变位置参数和多个可变关键字参数。推荐使用此方法。
print('I am {}'.format('orna')) #结果:I am orna print('I am {0},age {1}'.format('orna',32)) #结果:I am orna,age 32 print('I am {1},age {0}'.format('orna',32)) #结果:I am 32,age orna print('I am {name},age {age}'.format(name='orna',age=32)) #结果:I am orna,age 32
class A: def __init__(self): self.x = 1 self.y = 2 a = A() print('{0.x} {0.y}'.format(a))
#结果:1 2
print('{ob.x} {ob.y}'.format(ob=a))
#结果:1 2
li = [1, 2, 3]
print('{0[2]}'.format(li))
#结果:3
- 字符串的分割
split()可以指定以具体内容进行分割,默认是用空格分割。并且可以指定一个整数来决定最多分割多少次。
sr = 'how are you' print(sr.split()) #结果:['how', 'are', 'you']
rsplit()表示从右向左分割,和split功能一样并且有相同的参数。
splitlines()表示以行为单元进行分割,可以指定是否保留换行符splitlines(True)。
sr = '''how are you? I am fine, and you? ''' print(sr.splitlines()) #结果:['how are you?', 'I am fine,', 'and you?']
partition()表示返回一个三元组。
sr = 'how are you' print(sr.partition(' ')) #结果:('how', ' ', 'are you')
rpartition()表示从右向左,功能与partition一样返回一个三元组。
sr = 'how are you' print(sr.rpartition(' ')) #结果:('how are', ' ', 'you')
二、bytes
python2中不区分bytes和string,只有在python3中在区分bytes和string。
bytes和string的区别在于bytes是byte的序列,而string是unicode的序列。
b = b'hello world' c ='你好世界!'.encode() #也可能指定编码参数,如:encode('GBK')
因此,string使用encode()方法转化为bytes,bytes通过decode转化为string。也可能指定编码参数,如:decode('GBK')
三、bytearrary
bytearray和bytes不一样的地方在于,bytearray是可变的。
sr = '你好 世界!' b = sr.encode() print(b) #结果:b'xe4xbdxa0xe5xa5xbd xe4xb8x96xe7x95x8cxefxbcx81'
sr = '你好 世界!' b = bytearray(sr.encode()) #结果:b'xe4xbdxa0xe5xa5xbd xe4xb8x96xe7x95x8cxefxbcx81' print(b.decode())
四、作业
1.对两个数字列表进行合并,并按升序排列。
l1 = [1, 2, 3, 4] l2 = [2, 3, 7, 9] l1.extend(l2) l3 = l1.sort() print(l1) #结果:[1, 2, 2, 3, 3, 4, 7, 9]
2.对一个字符串进行反转。
sr = 'I love python!' sr1 = sr[::-1] print(sr1) #结果:!nohtyp evol I