day7
笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了
目录
- day7
- 53、列表的常用操作课后练习题
- 54、列表的循环遍历
- 列表的遍历—— while 循环
- 列表的遍历—— for 循环
- while 循环和 for 循环的对比
- 练习
- 55、元组的定义与操作
- 元组的定义
- 元组的相关操作
- 元组的相关操作——注意事项
- 元组的遍历
- 元组的特点
- 56、字符串的定义和操作
- 字符串的下标(索引)
- 字符串的常用操作
- 字符串常用操作汇总
- 字符串的遍历
- while 循环
- for 循环
- 字符串的特点
- 57、字符串的课后练习
53、列表的常用操作课后练习题
# 定义这个列表,并用变量接收它
list = [21, 25, 21, 23, 22, 20]
print(f"列表为 {list}")
# 追加一个数字31,到列表的尾部
list.append(31)
print(f"追加数字 31 后,列表为: {list}")
# 追加一个新列表[29, 33, 30],到列表的尾部
list2 = [29, 33, 30]
list.extend(list2)
print(f"追加新列表[29,33,30]后,列表为: {list}")
# 取出第一个元素(应是:21)
num1 = list[0]
print(f"第一个元素是: {num1}")
# 取出最后一个元素(应是:30)
num2 = list[-1]
print(f"最后一个元素是: {num2}")
# 查找元素31,在列表中的下标位置
index = list.index(31)
print(f"元素 31 在列表中的下标位置: {index}")
54、列表的循环遍历
列表的遍历—— while 循环
既然数据容器可以存储多个元素,那么,就会有需求从容器内依次取出元素进行操作。
将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。
-
如何遍历列表的元素呢?
- 可以使用前面学过的while循环
-
如何在循环中取出列表的元素呢?
- 使用列表[下标]的方式取出
-
循环条件如何控制?
-
定义一个变量表示下标,从0开始
-
循环条件为 下标值 < 列表的元素数量
-
基本语法格式:
示例:
def list_while_func():
"""
使用 while 循环遍历列表的演示函数
:return: None
"""
mylist = ["传智教育", "黑马程序员", "Python"]
# 循环控制变量通过下标索引来控制,默认0
# 每次循环将下标索引变量 +1
# 循环条件:下标索引变量 < 列表的元素数量
# 定义一个变量来标记列表的下标
index = 0 # 初始值为 0
while index < len(mylist):
# 通过 index 变量取出对应下标的元素
element = mylist[index]
print(f"列表的元素:{element}")
# 至关重要,将循环变量(index)每一次循环都 + 1
index += 1
list_while_func()
列表的遍历—— for 循环
除了while循环外,Python中还有另外一种循环形式:for循环。
对比while,for循环更加适合对列表等数据容器进行遍历。
基本语法格式:
表示,从容器内,依次取出元素并赋值到临时变量上。
在每一次的循环中,我们可以对临时变量(元素)进行处理。
示例:
def list_for_func():
"""
使用 for 循环遍历列表的演示函数
:return: None
"""
mylist = [1, 2, 3, 4, 5]
# for 临时变量 in 数据容器:
for element in mylist:
print(f"列表的元素有:{element}")
list_for_func()
while 循环和 for 循环的对比
while循环和for循环,都是循环语句,但细节不同:
-
在循环控制上:
-
while 循环可以自定循环条件,并自行控制;
-
for循环不可以自定循环条件,只可以一个个从容器内取出数据;
-
-
在无限循环上:
-
while循环可以通过条件控制做到无限循环;
-
for循环理论上不可以,因为被遍历的容器容量不是无限的;
-
-
在使用场景上:
-
while 循环适用于任何想要循环的场景;
-
for循环适用于,遍历数据容器的场景或简单的固定次数循环场景。
-
练习
mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# while 循环
def while_func():
index = 0
mylist2 = []
while index < len(mylist):
if(mylist[index] % 2 == 0):
mylist2.append(mylist[index])
index += 1
print(f"mylist 中的偶数为:{mylist2}")
def for_func():
index1 = 0
mylist2 = []
for element in mylist:
if element % 2 == 0:
mylist2.append(element)
print(f"mylist 中的偶数为:{mylist2}")
while_func()
for_func()
55、元组的定义与操作
元组同列表一样,都是可以封装多个、不同类型的元素在内。
但最大的不同点在于:
元组一旦定义完成,就不可修改
所以,当我们需要在程序内封装数据,又不希望封装的数据被篡改,那么元组就非常合适了
元组的定义
定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。
示例:
# 定义元组
t1 = (1, "Hello", True)
t2 = ()
t3 = tuple()
print(f"t1 的类型是:{type(t1)},内容是:{t1}")
print(f"t2 的类型是:{type(t2)},内容是:{t2}")
print(f"t3 的类型是:{type(t3)},内容是:{t3}")
tips:元组只有一个数据,这个数据后面要添加逗号
示例:
# 定义单个元素的元组
t4 = ("hello",)
print(f"t4 的类型是: {type(t4)}, t4的内容是: {t4}")
元组也支持嵌套:
示例:
# 元素的嵌套
t5 = ((1, 2, 3), (4, 5, 6))
print(f"t5 的类型是: {type(t5)}, t5的内容是: {t5}")
元组的相关操作
编号 | 方法 | 作用 |
---|---|---|
1 | index() | 查找某个数据,如果数据存在返回对应的下标,否则报错 |
2 | count() | 统计某个数据在当前元组出现的次数 |
3 | len(元组) | 统计元组内的元素个数 |
示例:
# 下标索引取出内容
num = t5[1][2]
print(f"从嵌套元组中取出的数据是:{num}")
# 元组的操作: index 查找方法
t6 = ("传智教育", "黑马程序员", "Python")
index = t6.index("黑马程序员")
print(f"在元组 t6 中查找黑马程序员,下标是: {index}")
# 元组的操作: count 统计方法
t7 = ("传智教育", "黑马程序员", "黑马程序员", "黑马程序员", "Python")
num = t7.count("黑马程序员")
print(f"在元组 t7 中统计黑马程序员的数量有: {num}个")
# 元组的操作: len 函数统计元组元素数量
t8 = ("传智教育", "黑马程序员", "黑马程序员", "黑马程序员", "Python")
num = len(t8)
print(f"在元组 t8 中元素有: {num}个")
元组的相关操作——注意事项
- 不可以修改元组的内容,否则会直接报错;
- 可以修改元组内的 list 的内容(修改元素、增加、删除、反转等);
- 不可以替换 list 为其它 list 或其它类型。
# error: 修改元组的内容
# t8[0] = "itcast"
元组的遍历
同列表一样,元组也可以被遍历。
可以使用while循环和for循环遍历它
# 元组的遍历: while
index = 0
while index < len(t8):
print(f"1元组的元素有: {t8[index]}")
# 至关重要
index += 1
# 元组的遍历: for
for element in t8:
print(f"2元组的元素有: {element}")
元组的特点
- 可以容纳多个数据;
- 可以容纳不同类型的数据(混装);
- 数据是有序存储的(下标索引);
- 允许重复数据存在;
- 不可以修改(增加或删除元素等,但是可以修改内部list的内部元素);
- 支持for循环。
示例:
# 定义一个元组
# 修改元组里面列表元素的内容
t9 = (1, 2, ["itheima", "itcast"])
print(f"t9 的内容是: {t9}")
t9[2][0] = "黑马程序员"
t9[2][1] = "chuanzhijiaoyu"
print(f"t9 的内容是: {t9}")
56、字符串的定义和操作
字符串是字符的容器,一个字符串可以存放任意数量的字符。
如,字符串:“itheima”
字符串的下标(索引)
和其它容器如:列表、元组一样,字符串也可以通过下标进行访问
- 从前向后,下标从0开始
- 从后向前,下标从-1开始
示例:
my_str = "itheima and itcast"
# 通过下标索引取值
value = my_str[2]
value2 = my_str[-16]
print(f"从字符串{my_str}取下标为2的元素的值是:{value},取下标为-16的元素的值是:{value2}")
同元组一样,字符串是一个:无法修改的数据容器。
所以:
- 修改指定下标的字符 (如:字符串[0] = “a”)
- 移除特定下标的字符 (如:del 字符串[0]、字符串.remove()、字符串.pop()等)
- 追加字符等 (如:字符串.append())
均无法完成。如果必须要做,只能得到一个新的字符串,旧的字符串是无法修改
示例:
error 修改字符串的值
my_str[2] = "H"
字符串的常用操作
-
查找特定字符串的下标索引值
语法:字符串.index(字符串)
-
字符串的替换
**语法:字符串.replace(字符串1,字符串2);** 功能:将字符串内的全部:字符串1,替换为字符串2; 注意:不是修改字符串本身,而是得到了一个新字符串;
可以看到,==字符串name本身并没有发生变化,而是得到了一个新字符串对象==。
所以结果要用新的字符串变量接收。
-
字符串的分割
**语法:字符串.split(分隔符字符串)**; 功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中; ==注意:字符串本身不变,而是得到了一个列表对象;==
可以看到,字符串按照给定的 <空格> 进行了分割,变成多个子字符串,并存入一个列表对象中。
-
字符串的规整操作(去前后空格)
语法:字符串.strip()
字符串的规整操作(去前后指定字符串)
语法:字符串.strip(字符串)
注意,传入的是“12” 其实就是:”1”和”2”都会移除,是按照单个字符。
-
统计字符串中某字符串的出现次数
语法:字符串.count(字符串)
-
统计字符串的长度
语法:len(字符串)
可以看出:
- 数字(1、2、3…)
- 字母(abcd、ABCD等)
- 符号(空格、!、@、#、$等)
- 中文
均算作1个字符
所以上述代码,结果20
字符串常用操作汇总
编号 | 操作 | 说明 |
---|---|---|
1 | 字符串[下标] | 根据下标索引取出特定位置字符 |
2 | 字符串.index(字符串) | 查找给定字符的第一个匹配项的下标 |
3 | 字符串.replace(字符串1, 字符串2) | 将字符串内的全部字符串1,替换为字符串2 不会修改原字符串,而是得到一个新的 |
4 | 字符串.split(字符串) | 按照给定字符串,对字符串进行分隔 不会修改原字符串,而是得到一个新的列表 |
5 | 字符串.strip() 字符串.strip(字符串) | 移除首尾的空格和换行符或指定字符串 |
6 | 字符串.count(字符串) | 统计字符串内某字符串的出现次数 |
7 | len(字符串) | 统计字符串的字符个数 |
字符串的遍历
while 循环
for 循环
字符串的特点
作为数据容器,字符串有如下特点:
- 只可以存储字符串
- 长度任意(取决于内存大小)
- 支持下标索引
- 允许重复字符串存在
- 不可以修改(增加或删除元素等)
- 支持for循环
基本和列表、元组相同
不同于列表和元组之处在于:字符串容器可以容纳的类型是单一的,只能是字符串类型。
不同于列表,相同于元组的在于:字符串不可修改
总体示例:
"""
演示以数据容器的角色,学习字符串的相关操作
"""
my_str = "itheima and itcast"
# 通过下标索引取值
value = my_str[2]
value2 = my_str[-16]
print(f"从字符串{my_str}取下标为2的元素的值是:{value},取下标为-16的元素的值是:{value2}")
# error 修改字符串的值
# my_str[2] = "H"
# index 方法
value = my_str.index("and")
print(f"在字符串{my_str}中查找 and,其起始下标是:{value}")
# replace 方法
new_my_str = my_str.replace("it", "程序")
print(f"将字符串{my_str},进行替换后得到:{new_my_str}")
# split 方法
my_str = "hello python itheima itcast"
my_str_list = my_str.split(" ")
print(f"将字符串{my_str}进行split切割后得到:{my_str_list}, 类型是:{type(my_str_list)}")
# strip 方法
my_str = " itheima and itcast "
new_my_str = my_str.strip() # 不传入参数,去除首尾空格
print(f"字符串{my_str}被 strip 后,结果:{new_my_str}")
my_str = "12itheima and itcast21"
# 注意,传入的是 "12",其实就是:"1" 和 "2" 都会移除,是按照单个字符。
new_my_str = my_str.strip("12") # 不传入参数,去除首尾空格
print(f"字符串{my_str}被 strip('12') 后,结果:{new_my_str}")
# 统计字符串中某字符串的出现次数
my_str = "itheima and itcast"
count = my_str.count("it")
print(f"字符串{my_str}中 it 出现的次数是:{count}")
# 统计字符串的长度
num = len(my_str)
print(f"字符串{my_str}的长度是:{num}")
57、字符串的课后练习
my_str = "itheima itcast boxuegu"
count = my_str.count("it")
print(f"{my_str}中 'it' 的出现次数为:{count}")
my_str1 = my_str.replace(" ", "|")
print(f"{my_str}中将空格换为'|'后结果为:{my_str1}")
my_str2 = my_str1.split("|")
print(f"{my_str}中按照'|'分割后结果为:{my_str2}")