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()方式。

 

posted @ 2018-11-21 22:25  梦徒  阅读(356)  评论(0)    收藏  举报