文章目录
列表
1.定义和表示
列表就是表示东西的东西,通过中括号[]
表示,不同内容用逗号隔开
2.特性
2-1 与字符串一样,也有索引和切片;当索引超过范围时会报错。
list = ["Alex", "Bob", "Cindy", "David"]
print(list[2])
print(list[::-2])
执行代码结果如下:
2-2 也可以通过for
循环来遍历列表的每一个元素
2-3 用print(len(list))
表示列表的长度,即列表元素的个数
2-4 列表内部可以进行嵌套
存在一个嵌套的列表
list = ["123", "abc", ["Alex",["Nancy", "孙悟空", "pqk"],"哈哈"],"1aq"]
想要查找到孙悟空
,可以通过索引操作。孙悟空
在大列表中索引为2的列表中,并进一步在该列表索引为1的列表,最后再进入列表索引为1位置,就是最终的结果。
print(list[2][1][1])
如果想更进一步,查找到孙悟空
,并将其修改为孙尚香
,借用字符串修改的replace()
,即可
print(list[2][1][1].replace("悟空","尚香"))
注意,由于字符串是不可变的,我这里的list[2][1][1].replace("悟空","尚香")
实际上已经是一个新的变量,所以此处输出的是一个字符串,而非列表。如果想输出一个修改后的新的列表,需要进行替换操作,代码如下:
list = ["123", "abc", ["Alex",["Nancy", "孙悟空", "pqk"],"哈哈"],"1aq"]
list[2][1][1] = list[2][1][1].replace("悟空","尚香")
print(list)
3.增删改查
3-1 添加
首先,创建一个空列表,模拟测试环境
list = []
然后依次向列表中追加元素
list.append("詹姆斯")
list.append("贾巴尔")
list.append("拉塞尔")
最后输出列表内容print(list)
,查看结果如下:
['詹姆斯', '贾巴尔', '拉塞尔']
故append("元素")
表示从列表元素的最后一个开始追加内容。
紧接着上面的例子,我要在詹姆斯
的前面加上乔丹
,在拉塞尔
的前面加上约翰逊
此时就应该插入
元素,而不是追加
元素了。
list.insert(0, "乔丹")
使用insert(索引,"元素")
时,将乔丹
放在索引为0的位置,原列表中索引为0的詹姆斯
以及后面的元素就会自动向后退一个位置,于是结果如下:
['乔丹', '詹姆斯', '贾巴尔', '拉塞尔']
同理:
list.insert(3, "约翰逊")
原索引位置为3的拉塞尔
也会被新插入的约翰逊
挤走位置。
可以理解为堵车的加塞,你的前面被插入了一辆轿车,你无可奈何只能接受,你和你后面的所有车都相当于自动后退一个位置。
此时列表就变成了这个样子。
['乔丹', '詹姆斯', '贾巴尔', '约翰逊', '拉塞尔']
这时我发现一个一个的添加元素太慢了,于是准备批量添加。
list.extend(["拉里伯德", "邓肯", "奥尼尔"])
相当于在原有的列表后面追加了一个列表的所有元素,合并为一个列表,代码执行结果如下:
['乔丹', '詹姆斯', '贾巴尔', '约翰逊', '拉塞尔', '拉里伯德', '邓肯', '奥尼尔']
3-2-1 删除
还是3-1的环境,已有列表如下:
list = ['乔丹', '詹姆斯', '贾巴尔', '约翰逊', '拉塞尔', '拉里伯德', '邓肯', '奥尼尔']
想要删除贾巴尔
,在该列表中的索引值是2
list.pop(2)
执行代码的结果:
['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '邓肯', '奥尼尔']
此时还想要删除邓肯
list.remove("邓肯")
最后结果是
['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '奥尼尔']
简单总结:pop()
跟索引,remove()
跟具体的元素值
3-2-2 循环删除
给定数据list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
删除所有姓周
的名字
错误代码:
list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
for name in list:
if name.startswith("周"):
list.remove(name)
print(list)
执行结果:['赵本山', '刘德华', '周树人', '赵四']
可见,批量循环删除,没有完全删除符合条件的元素。
原因分析如下:
正确代码:
list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
# 创建一个临时列表,存储将要删除的元素
tmp = []
# 遍历列表,得到列表的每一个元素
for name in list:
# 判断每个名字是否姓周
if name.startswith("周"):
# 如果姓周,将该名字添加到临时列表中
tmp.append(name)
# 输出姓周的所有名字的临时列表的内容
print(tmp)
# 遍历临时列表,得到每个姓周的名字
for name in tmp:
# 将每个姓周的名字,从原列表中删除
list.remove(name)
# 输出最终所需要的结果
print(list)
3-3 修改
紧跟3-2的数据,初始环境是
list = ['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '奥尼尔']
想要将奥尼尔
修改成科比
,直接通过索引即可
list[-1] = "科比"
print(list)
最后结果是['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '科比']
3-4 查询
紧跟3-3的数据,['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '科比']
想要查询列表中的数据,也可以直接通过索引操作
print(list[3])
3-5.实例练习
存在列表list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
将列表中姓周
的姓都改成张
list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
# 遍历列表中所有名字的索引,用range()和len()表示索引的范围:0-5(不包括6)
for i in range(len(list)):
# 通过遍历索引,从而得到对应的列表元素,可以一一对应
name = list[i]
# 判断遍历得到的字符串是否以”周“开头
if name.startswith("周"):
# 将字符串”张“和得到的姓名中的“名字”部分进行拼接,生成新的字符串
new_name = "张" + name[1:]
# 输出新的姓名
print(new_name)
# 将新的姓名赋值给原列表,替换原有的姓“周”的名字
list[i] = new_name
# 输出最终的列表元素
print(list)
执行代码后的结果:
['赵本山', '张星驰', '刘德华', '张杰伦', '张树人', '赵四']
4.排序
给出随机排列数值的列表list = [20, 3, 100, 87, 210, 49, 0, 102]
升序排序操作:(从小到大排序)
list.sort()
print(list)
得到结果[0, 3, 20, 49, 87, 100, 102, 210]
同理也可以降序排列:
list.sort(reverse=True)
print(list)
得到结果[210, 102, 100, 87, 49, 20, 3, 0]