前言
程序中随处都可见字符串,随便看断代码应该都是有的。同样,作为python的一种数据类型,比如工程代码中的打印日志,注释函数,数据的操作等等,都会用到字符串。我相信看到这个词,你就知道它大概是什么。
在本章内容中,我们再详细的学习字符串的一些常用操作,并深入解释一下其中的细节。
什么是字符串
从实用的角度来看,字符串可以用来表示能够编码为文本或字节的任何事物。
在python中,字符串被划分为不可变序列这一类型,意味着这些字符串所包含的字符存在从左至右的位置顺序,并且它们不可以在原位置修改。
字符串是由字符组成的一个序列,通常我们会使用单引号、双引号、三引号来包裹住字符来表示字符串。
s = "" # 空字符串
n = '123'
stu = 'tom'
country = 'china'
pasdword = "python"
text = '''
My name is tom, i am a student.
I'm living in China.
I love China.
'''
在这里我们定义了几个字符串,python支持三种引号形式定义字符串。三引号则主要应用于类或函数的注释(可以定义多行字符串),单引号和双引号则没什么却别。
常见的字符串及其操作
操作 | 解释 |
---|---|
s = ‘s\np\ta\x00m’ | 转义序列 |
s = r’temp\spam’ | 原始字符串(不进行转义) |
s1 + s2 | 字符串拼接 |
s * 3 | 重复 |
s[i] | 索引 |
s[i : j] | 切片 |
len(s) | 长度 |
“a %s parrot” % kind | 字符串格式化表达式 |
“a {0} parrot”.format(kind) | 字符串格式化方法 |
s.find(‘a’) | 搜索 |
s.rstrip() | 移除右侧空白 |
s.replace(‘a’, ‘b’) | 替换 |
s.split(‘,’) | 用分隔符分组 |
s.isdigit() | 内容测试 |
s.lower() | 大小写转换 |
s.endswith(‘a’) | 尾部测试 |
‘,’.join(strlist) | 分隔符连接 |
for x in s: print(s) | 迭代 |
‘a’ in s | 成员关系 |
[c * 2 for c in s] | 成员关系 |
map(ord, s) | ord 返回单个字符的ASCII码 |
re.match(‘sp(.*), line’) | 模式匹配:库模块 |
举例:
s = 's\np\ta'
print(s)
输出:
s
p a
在转义字符的应用中最常用的也就是’\n’(换行符),'\t’横向制表符。在文本读取处理中,我们就可以用换行符去一行行读取。
字符串的常用操作
索引和切片
my_job = 'hacker'
print(len(my_job))
print(my_job[0])
print(my_job[1:3])
6
h
ac
字符串作为序列,支持索引、切片和遍历操作。
索引从左往右从0开始,index=0表示第一个元素;从右往左则是从-1,-2,-3… 即为索引;
[index, index+2]则表示第index个元素到index+1个元素组成的子字符串。
my_job = 'hacker'
print(my_job[1:])
print(my_job[:-1])
print(my_job[::-1])
print(my_job[1::2])
acker
hacke
rekcah
akr
s[i:j:k] k为步长,默认值为1,允许跳过元素和反转顺序。
遍历字符串同样很简单。即为遍历字符串中的每个字符。
my_job = 'hacker'
for c in my_job:
print(c, end=' ')
h a c k e r
for循环语句在循环中对字符串进行迭代。
注意,前面说过python字符串是不可变的。
字符串的拼接
my_job = 'hacker'
my_job[0] = 'H'
s = 'H' + my_job[1:]
s = my_job.replace('h', 'H')
我们可以采用上面的方法来替换某一个字符。
第一种方法是直接采用大写的"H",通过+操作符,与原字符串切片操作的子字符串拼接成新的字符串;
第二种方法则是扫描原字符串,使用replace进行替换。
在其他语言中,比如java中,有可变的字符串类型,每次添加、改变或删除字符,无需创建新的字符串,时间复杂度仅为O(1).但可惜的是python中每次要改变字符串时,需要O(n)的时间复杂度。
txt = 'i love python'
txt_ls = txt.split()
print(txt_ls)
s_txt = '*'.join(txt_ls)
print(s_txt)
s = ' i love coding '
print(s.strip())
输出:
['i', 'love', 'python']
i*love*python
i love coding
- split 把字符串分割成子字符串,并返回一个分割后子字符串组合的列表;
- join 把每个元素按照指定的方式连接起来;
- strip 去掉字符串首尾的空格;比如从文档中读取的字符串,就需要把空格去掉。
字符串的格式化输出
通常,我们使用一个字符串作为模板,模板中会有格式符,这些格式符为后学真实值预留位置,以呈现出真实值应该呈现的形式。
info = 'this is %d %s bird!' % (1, 'white')
print(info)
n = 1
category = 'white'
tem = 'this is {} {} bird!'.format(n, category)
print(tem)
temp = f'this is {n} {category} bird!'
print(temp)
输出:
this is 1 white bird!
this is 1 white bird!
this is 1 white bird!