chapter 01 字符串的那些事


前言

程序中随处都可见字符串,随便看断代码应该都是有的。同样,作为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!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他是只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值