python常用数据结构之字符串操作
字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串.
创建字符串很简单,只要为变量分配一个值即可。例如:
s = 'Hello World!'
Python字符串属性方法操作:
1.字符串格式输出对齐
>>> str = "Python stRING" >>> str.center(20) #生成20个字符长度,str排中间 ' Python stRING ' >>> str.ljust(20) #生成20个字符长度,str左对齐 'Python stRING ' >>> str.rjust(20) #生成20个字符长度,str右对齐 ' Python stRING' >>>
2.大小写转换
>>> str = "Python stRING" >>> str.upper() #转大写 'PYTHON STRING' >>> str.lower() #转小写 'python string' >>> str.capitalize() #字符串首为大写,其余小写 'Python string' >>> str.swapcase() #大小写对换 'pYTHON STring' >>> str.title() #以分隔符为标记,首字符为大写,其余为小写 'Python String'
3.字符串条件判断
>>> str = '01234'
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str.isdigit() #是否全是数字,并至少有一个字符
True
>>> str = 'string'
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str.isalpha() #是否全是字母,并至少有一个字符
True
>>> str.islower() #是否全是小写,当全是小写和数字一起时候,也判断为True
True
>>> str = "01234abcd"
>>> str.islower() #是否全是小写,当全是小写和数字一起时候,也判断为True
True
>>> str.isalnum() #是否全是字母和数字,并至少有一个字符
True
>>> str = ' '
>>> str.isspace() #是否全是空白字符,并至少有一个字符
True
>>> str = 'ABC'
>>> str.isupper() #是否全是大写,当全是大写和数字一起时候,也判断为True
True
>>> str = 'Aaa Bbb'
>>> str.istitle() #所有单词字首都是大写,标题
True
>>> str = 'string learn'
>>> str.startswith('str') #判断字符串以'str'开头
True
>>> str.endswith('arn') #判读字符串以'arn'结尾
True
4.字符串搜索定位与替换
>>> str='string lEARn'
>>> str.find('z') #查找字符串,没有则返回-1,有则返回查到到第一个匹配的索引
-1
>>> str.find('n') #返回查到到第一个匹配的索引
4
>>> str.rfind('n') #返回的索引是最后一次匹配的
11
>>> str.index('a') #如果没有匹配则报错
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: substring not found
>>> str.index("n") #同find类似,返回第一次匹配的索引值
4
>>> str.rindex("n") #返回最后一次匹配的索引值
11
>>> str.count('a') #字符串中匹配的次数
0
>>> str.count('n') #同上
2
>>> str.replace('EAR','ear') #匹配替换
'string learn'
>>> str.replace('n','N')
'striNg lEARN'
>>> str.replace('n','N',1)
'striNg lEARn'
>>> str.strip('n') #删除字符串首尾匹配的字符,通常用于默认删除回车符
'string lEAR'
>>> str.lstrip('n') #左匹配
'string lEARn'
>>> str.rstrip('n') #右匹配
'string lEAR'
>>> str = " tab"
>>> str.expandtabs() #把制表符转为空格
' tab'
>>> str.expandtabs(2) #指定空格数
' tab'
5.字符串编码与解码
>>> str = "字符串学习"
>>> str
'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xe5\xad\xa6\xe4\xb9\xa0'
>>> str.decode('utf-8') #解码过程,将utf-8解码为unicode
u'\u5b57\u7b26\u4e32\u5b66\u4e60'
>>> str.decode("utf-8").encode('gbk') #编码过程,将unicode编码为gbk
'\xd7\xd6\xb7\xfb\xb4\xae\xd1\xa7\xcf\xb0'
>>> str.decode('utf-8').encode('utf-8') #将unicode编码为utf-8
'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xe5\xad\xa6\xe4\xb9\xa0'
6.字符串分割变换
>> str = "Learn string"
>>> '-'.join(str)
'L-e-a-r-n- -s-t-r-i-n-g'
>>> li = ['Learn','string']
>>> '-'.join(li)
'Learn-string'
>>> str.split('n')
['Lear', ' stri', 'g']
>>> str.split('n',1)
['Lear', ' string']
>>> str.rsplit('n')
['Lear', ' stri', 'g']
>>> str.rsplit('n',1)
['Learn stri', 'g']
>>> str.splitlines()
['Learn string']
>>> str.partition('n')
('Lear', 'n', ' string')
>>> str.rpartition('n')
('Learn stri', 'n', 'g')
7.截取字符串
>>> str = '0123456789' >>> print(str[0:3]) #截取第一位到第三位的字符 012 >>> print(str[:]) #截取字符串的全部字符 0123456789 >>> print(str[6:]) #截取第七个字符到结尾 6789 >>> print(str[:-3]) #截取从头开始到倒数第三个字符之前 0123456 >>> print(str[2]) #截取第三个字符 2 >>> print(str[-1]) #截取倒数第一个字符 9 >>> print(str[::-1]) #创造一个与原字符串顺序相反的字符串 9876543210 >>> print(str[-3:-1]) #截取倒数第三位与倒数第一位之前的字符 78 >>> print(str[-3:]) #截取倒数第三位到结尾 789 >>>
Python格式化字符串的 6种方式
几乎任何一种编程语言,都把字符串列为最基础和不可或缺的数据类型。而拼接字符串是必备的一种技能。今天,我跟大家一起来学习Python拼接字符串的七种方式。
1、来自C语言的%方式
>>> print('%s %s' %('hello','world')) hello world
%号格式化字符串的方式继承自古老的C语言,这在很多编程语言都有类似的实现。上例的%s是一个占位符,它仅代表一段字符串,并不是拼接的实际内容。实际的拼接内容在一个单独的%号后面,放在一个元组里。
类似的占位符还有:%d(代表一个整数)、%f(代表一个浮点数)、%x(代表一个16进制数),等等。%占位符既是这种拼接方式的特点,同时也是其限制,因为每种占位符都有特定意义,实际使用起来太麻烦了。
2、format() 拼接方式
>>> s1 = 'Hello {} ! My name is {}.' .format('world','梦徒') >>> print(s1) Hello world ! My name is 梦徒.
还有如下写法,
#!/usr/bin/env python #coding:utf-8 name = input('name:') age = input('age:') job = input('job:') salary = input('salary:') info = ''' ------------info of {_name} -------------- Name:{_name} Age:{_age} Job:{_job} Salary:{_salary} ''' .format(_name=name, _age=age, _job=job, _salary=salary) print(info)
这种方式使用花括号{}做占位符,在format方法中再转入实际的拼接值。容易看出,它实际上是对%号拼接方式的改进。这种方式在Python2.6中开始引入。
3、面向对象模板拼接
>>> from string import Template >>> s = Template('${s1} ${s2}!') >>> print(s.safe_substitute(s1='Hello',s2='World')) Hello World!
说实话,这种方法不太友好,处理个字符串感觉要面向对象了,了解就行.
4、常用的 + 号方式
s1 = 'Hello World !' s2 = 'My name is 梦徒!' print(s1 + s2) Hello World !My name is 梦徒!
5、join()拼接方式
>>> str_list = ['Hello','World'] >>> s_join = ''.join(str_list) >>> print(s_join) HelloWorld >>> s_join = ' '.join(str_list) >>> print(s_join) Hello World >>> s_join = '-'.join(str_list) >>> print(s_join) Hello-World
str对象自带的join()方法,接受一个序列参数,可以实现拼接。拼接时,元素若不是字符串,需要先转换一下。可以看出,这种方法比较适用于连接序列对象中(例如列表)的元素,并设置统一的间隔符。
当拼接长度超过20时,这种方式基本上是首选。不过,它的缺点就是,不适合进行零散片段的、不处于序列集合的元素拼接。
6、f-string方式
>>> s1 = 'World' >>> s2 = '梦徒' >>> words = f'Hello {s1}. My name is {s2}.' >>> print(words) Hello World. My name is 梦徒.
f-string方式出自PEP 498(Literal String Interpolation,字面字符串插值),从Python3.6版本引入。其特点是在字符串前加 f 标识,字符串中间则用花括号{}包裹其它字符串变量。
这种方式在可读性上秒杀format()方式,处理长字符串的拼接时,速度与join()方法相当。
尽管如此,这种方式与其它某些编程语言相比,还是欠优雅,因为它引入了一个 f 标识。而其它某些程序语言可以更简练,比如shell:
s1="world" s2="梦徒" words="Hello ${s1}. My name is ${s2}." echo $words >>>Hello world. My name is 梦徒.
总结一下,我们前面说的“字符串拼接”,其实是从结果上理解。若从实现原理上划分的话,我们可以将这些方法划分出三种类型:
格式化类:%、format()、template 拼接类:+ 、join() 插值类:f-string
当要处理字符串列表等序列结构时,采用join()方式;拼接长度不超过20时,选用+号操作符方式;长度超过20的情况,高版本选用f-string,低版本时看情况使用format()或join()方式。

浙公网安备 33010602011771号