字符串类型及操作

目标:字符串确切来说属于容器类型,1个变量中同时保存多个元素值。掌握字符串定义、字符串遍历、通过索引获取字符串中的元素!!!

1、字符串的定义

字符串是 Python 中最常用的数据类型。我们一般使用”引号”来创建字符串。创建字符串很简单,只要为变量分配一个值即可。

案例1:使用单引号或双引号定义字符串变量

1
2
3
4
5
str1 = 'abcdefg'
str2 = "hello world"

print(type(str1)) # <class 'str'>
print(type(str2)) # <class 'str'>

注意:在Python中,和Shell有所不同;Python中定义字符串不管使用单引号也好,双引号也好都是字符串定义,几乎没有区别。

2、底层存储形式

在计算机中,Python中的字符串属于序列结构(数据容器的一种)。所以其底层存储占用一段连续的内存空间。

1
str1 = 'itheima'

结构原理图:

索引下标默认从0开始

索引下标的最大值 = len(字符串) - 1

7个字符,则索引下标的最大值为7-1 = 6

img

注意:索引下标从0开始。

3、聊聊索引下标

索引下标,就是编号。比如火车座位号,座位号的作用:按照编号快速找到对应的座位。同理,下标的作用即是通过下标快速找到对应的数据。

img

举个例子:

1
2
3
name = 'abcdef'
print(name[0]) # a
print(name[3]) # d

img

4、字符串切片操作(重点)

作用:就是从字符串中截取一部分你想要内容的过程 => 切片 => 截取你想要的内容

所谓的切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。

字符串切片基本语法

顾头不顾尾:

1
2
3
4
5
6
字符串/列表/元组名称[开始位置下标:结束位置下标:步长]

numstr = '0123456789'
numstr[0:3:1] # 012 => range方法非常类似,步长:每次前进1步
numstr[0:3:2] # 02 => 每次前进2步
步长可以为负数,正数代表从左向右截取,负数代表从右向左截取

① 不包含结束位置下标对应的数据, 正负整数均可;

② 步长是选取间隔,正负整数均可,正数从左向右,负数从右向左。默认步长为1。

还是有点陌生,没关系,给你举个栗子:

1
numstr = '0123456789'

如果想对numstr字符串进行切片,如下图所示:

img

字符串切片小口诀

记口诀:切片其实很简单,只顾头来尾不管,步长为正正向移,步长为负则逆向移

如果还是有点不太清楚这个原理,建议大家对字符串进行画图

img

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
numstr = '0123456789'
# 1、从2到5开始切片,步长为1
print(numstr[2:5:1])
print(numstr[2:5])
# 2、只有结尾的字符串切片:代表从索引为0开始,截取到索引为5的位置(不包含索引为5的数据)
print(numstr[:5])
# 3、只有开头的字符串切片:代表从起始位置开始,已知截取到字符串的结尾
print(numstr[1:])
# 4、获取或拷贝整个字符串
print(numstr[:])
# 5、调整步阶:类似求偶数
print(numstr[::2])
# 6、把步阶设置为负整数:类似字符串翻转
print(numstr[::-1])
# 7、起始位置与结束位置都是负数
print(numstr[-4:-1])
# 8、结束字符为负数,如截取012345678
print(numstr[:-1])

5、字符串相关方法(重点)

5.1 字符串中的查找方法

所谓字符串查找方法即是查找子串(关键词)在字符串中的位置或出现的次数。

基本语法:

1
2
3
字符串.find(要查找的字符或者子串)
找到:返回这个字符或者子串在字符串中开始的位置下标
没有找到则返回-1

☆ find()方法

作用:检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则返回-1。

1
2
3
4
5
6
# 定义一个字符串
str1 = 'hello world hello linux hello python'
# 查找linux子串是否出现在字符串中
print(str1.find('linux'))
# 在str1中查找不存在的子串
print(str1.find('and'))

案例:使用input方法输入任意一个文件名称,求点号的索引下标

1
2
3
4
5
6
7
8
9
10
11
12
13
'''
find():默认从左向右提取,提取关键词首次出现的位置
rfind():默认从做向右提取,提取关键词最后一次出现的位置
'''
# 第一步:获取文件名称
filename = input("请输入您要上传文件的名称:")
# 第二步:通过rfind获取最后一个点号位置
pos = filename.rfind('.') # 1.png => 1
# 第三步:提取文件名称以及文件后缀(切片)
name = filename[:pos] # filename[:1] => 1
postfix = filename[pos:] # filename[1:] => .png
print(f"文件名称:{name}")
print(f"文件后缀:{postfix}")

5.2 字符串的替换方法

所谓修改字符串,指的就是通过函数(方法)的形式修改字符串中的数据。

☆ replace()方法

基本语法:

1
2
3
字符串.replace(要替换的内容, 替换后的内容, 替换的次数-可以省略)

替换次数,代表替换多少次,可以省略,省略后就代表替换所有!!!

案例:编写一个字符串,然后把字符串中的linux替换为python

1
2
3
4
5
6
7
str1 = 'hello linux and hello linux'
# 把字符串中所有linux字符替换为python
print(str1.replace('linux', 'python'))
# 把字符串中的第一个linux进行替换为python
print(str1.replace('linux', 'python', 1))
# 把and字符串替换为&&
print(str1.replace('and', '&&'))

目前在工作中,replace主要用于实现关键字替换或过滤功能。北京 ==> BJ,论坛关键字过滤

☆ split()方法

作用:对字符串进行切割操作,返回一个list列表类型的数据

1
2
str1 = 'apple-banana-orange'
print(str1.split('-'))

☆ join()方法

作用:和split()方法正好相反,其主要功能是把序列拼接为字符串

1
字符串.join(数据序列)

案例:把水果列表[‘apple’, ‘banana’, ‘orange’]拼接成’apple-banana-orange’

1
2
list1 = ['apple', 'banana', 'orange']
print('-'.join(list1))

☆ strip()方法

作用:用于移除字符串开头和结尾的指定字符(默认为空格)。它不会影响字符串中间的字符。

基本语法

1
2
3
字符串.strip()

字符串.strip(指定字符)

案例:去除字符串首尾空格

1
2
3
4
5
6
7
8
9
10
11
'''
字符串.strip() :删除字符串两边空格
字符串.strip(指定字符) :删除字符串两边指定字符
'''
# 1. 定义一个外部接收的字符串
username = ' admin '
# 2. 判断username是否等于admin
if username.strip() == 'admin':
print('账号验证成功,正常登录')
else:
print('账号验证失败,请重新输入')