【4.3】数据容器:str字符串
一、再识字符串
虽然之前已经学习过字符串,但此处我们需要以数据容器的视角重新认识一下字符串。
尽管字符串看起来不像列表、元组那样,一看就是存放了许多数据的容器。但不可否认的是,字符串同样也是数据容器的一员。
字符串是字符的容器,一个字符串可以存放任意数量的字符。
二、字符串的下标(索引)
和其他容器,如列表、元组一样,字符串也可以通过下标进行访问。
1.从前向后,下标从0开始递增;
2.从后向前,下标从-1开始递减。
# 通过下标获取特定位置字符
name = "zhangsan"
print(name[0]) # z
print(name[-1]) # n
另外一个方面来说,我们知道列表是可修改的,元组是不可修改的。那么字符串是可修改还是不可修改的呢?
同元组一样,字符串是一个无法修改的数据容器。
所以,例如:
1.修改指定下标的字符,如str[0] = "a"
;
2.移除特定下标的字符,如del str[0]、str.remove()、str.pop()
;
3.追加字符,如str.append()
等操作。
**均无法完成。**如果必须要做,我们只能去得到一个新字符串,而不能修改老字符串。
三、字符串的常用操作
- 查找特定字符串的下标索引值
# 语法
字符串.index(字符串)
示例:
my_str = "A and B"
print(my_str.index("and")) # 2
- 字符串的替换
# 语法
字符串.replace(字符串1, 字符串2)
功能:将字符串内的全部字符串1
替换为字符串2
。
注意:不是修改字符串本身,而是得到了一个新的字符串。
示例:
my_str = "A and B and C"
new_my_str = my_str.replace("and", "&")
print(f"将字符串{my_str}进行替换后得到{new_my_str}") # 将字符串A and B and C进行替换后得到A & B & C
从上面例子也可看出,我们在输出my_str
时,它仍然是老字符串的原本内容,说明老字符串的内容并没有被修改,而只是返回得到了一个新字符串。
- 字符串的分割
# 语法
字符串.split(分隔符字符串)
功能:按照分隔符字符串,将字符串划分为多个字符串,并存入列表对象中。
注意:字符串本身不变,而是得到了一个列表对象。
示例:
my_str = "hello A B C"
my_str_list = my_str.split(" ")
print(f"将字符串{my_str}进行split切分后得到:{my_str_list}") # 将字符串hello A B C进行split切分后得到:['hello', 'A', 'B', 'C']
- 字符串的规整操作 — 去前后空格
# 语法
字符串.strip()
示例:
my_str = " A and B "
print(my_str.strip()) # A and B
- 字符串的规整操作 — 去前后指定字符串
# 语法
字符串.strip(字符串)
示例:
my_str = "123 A and B 321"
print(my_str.strip("123")) # " A and B "
注意:传入的虽然是“123”,但其实是按照单个字符,即“1”、“2”、“3”进行移除的,所以“321”也会被移除。
- 统计字符串中某字符串的出现次数
示例:
my_str = "A and B and C"
count = my_str.count("and")
print(f"字符串{my_str}中and出现的次数是:{count}")
- 统计字符串的长度
示例:
my_str = "A and B and C"
num = len(my_str)
print(num) # 13
四、字符串的遍历
while循环
my_str = "zhangsan"
index = 0
while index < len(my_str):
print(my_str[index])
index += 1
for循环
my_str = "zhangsan"
for i in my_str:
print(i)
五、字符串的特点
作为数据容器,字符串有如下特点:
1.只可以存储字符串;
2.长度任意(取决于内存大小);
3.支持下标索引;
4.允许重复字符串存在;
5.不可以修改;
6.支持for循环。