一.列表
列表是有序的,可变的容器,可变是指元素个数,位置,内容.
列表的声明
a.声明变量赋一个列表值
scores = [92,93,85]
b.将其他的数据类型转换成列表(只有序列才能转换:字符串和range,字典,元祖,集合,生成式和迭代器)
numbers = list(range(10))
二.列表的增,删,改,查
1.查:获取列表中的元素
a.获取单个元素:列表[下标]
tv_names = ['请回答1988','琅琊榜','甄嬛传','生活大爆炸','尼基塔']
print(tv_names[0])
#输出结果:请回答1988
b.获取部分元素(切片):列表[下标1:下标2]
print(tv_names[1:3])
#输出结果:['琅琊榜', '甄嬛传']
#输出结果是列表
c.遍历元素
for item in tv_names:
print(item)
#输出结果
请回答1988
琅琊榜
甄嬛传
生活大爆炸
尼基塔
# 写一个列表来保存一个班的学生成绩(6个),统计班上成绩在80分以上的人的个数
scores = [90,99,78,60,65,70]
count = 0
for item in scores:
if item > 80:
count += 1
print(count)
遍历列表的元素时,一般遍历它的拷贝值
2.改(修改元素的值)
语法:列表名[下标]=新值
novel = ['福尔摩斯探案集','盗墓笔记','三体']
novel[1] = '飘'
print(novel)
#输出结果:['福尔摩斯探案集', '飘', '三体']
注意:下标不能越界
3.增(增加列表的元素)
a. 列表.append(元素):在列表最后添加元素
b. 列表.insert(下标,元素):在指定下标前加入一个元素
novel.insert(1,'东方快车谋杀案')
print(novel)
#输出结果:['福尔摩斯探案集', '东方快车谋杀案', '飘', '三体']
#练习:录入五个学生的成绩,并保存在一个列表中
scores = []
i = 0
while i < 5:
a = int(input('请输入一个成绩:'))
scores.append(a)
i += 1
print(scores)
注意:列表中元素的个数发生改变后,列表中每个元素的下标会根据新的位置重新分配
4.删(删除列表中的元素)
a. del 列表[下标]:根据下标去删除列表中的元素
b. 列表.remove(元素):删除列表中的某个值
注意:如果元素有多个值,只删除最前面的那个
c. 列表.pop(下标):将列表中指定下标对应的元素取出来
# 练习:想尽一切办法,将一个保存成绩的列表中,成绩低于60分的全部删除
#[78,59,40,90,89,45,69,30]
scores = [78,59,40,90,89,45,69,30]
for item in scores[:]:#拷贝一份列表,这样下标就不会根据元素的减少而改变
if item <60:
scores.remove(item)
print(scores)
三.列表数据的存储
值类型:整型,浮点型,布尔型,字符串在存储时直接存值
引用类型:列表,字典,元祖,集合,函数,自定义的类的对象等在存储时存的是地址.
a1 = [1,2]
b1 = a1#引用类型赋值时赋的是地址
c1 = a1[:] #先将列表a1中的元素拷贝一份,存到一个新的地址,然后把新的地址赋给c1
a1.append(100)
print(a1,b1,c1)
#输出结果是:[1,2,100] [1,2,100] [1,2]
注意:列表c1中的元素不受列表a1元素变化的影响,因为地址不同
四.列表的相关运算
1.+操作:
列表1+列表2,是将列表1中的元素和列表2中的元素依次合并,产生一个新的列表
2.×操作:
列表1×N:将列表1中的元素重复N次,产生一个新的列表
- in/ not in:
元素 in 列表 :判断一个元素是否在列表中
元素not in 列表 :判断一个元素是否不在列表中
4.获取列表的长度:
len(序列)
print(len([1,2,3]))
names = ['海贼','一拳超人','一人之下','进击的巨人']
print(len(names))
#输出结果为:3
5.相关的方法
(1) 列表.count(元素):统计指定的元素在列表中有几个
(2) 列表.extend(序列):将序列中的元素添加到列表中
numbers = [1,20,3,56]
numbers.extend([100,200])
print(numbers)
#输出结果是:[1,20,3,56,100,200]
numbers.append([100,200])
print(numbers)
#输出结果是:[1,20,3,56[100,200]]
(3) 列表.index(元素):获取指定元素对应的第一个下标
(4) 列表.pop() :将列表中最后一个元素从列表中取出来
(5) 列表.reverse():列表中的元素反序
(6) 列表.sort:对列表元素进行排序(默认是升序)
列表.sort(reserve=True):对列表元素进行降序排序
(7) 列表.clear():将列表中的元素全部删除
(8). 列表.copy():将列表中的元素全部拷贝一份,产生一个新的列表,相当于列表[:]
注意:这里的拷贝是浅拷贝
五.浅拷贝和深拷贝
浅拷贝:只是单纯地将值拷贝(如果是对象,就直接拷贝对象的地址)
深拷贝:会拷贝对象地址对应的值,产生一个新的地址,将新的地址进行赋值
numbers1 = [1,2]
numbers = [numbers1,3,4,'abc']
new_number = numbers.copy()#浅拷贝
import copy
new_numbers2 = copy.deepcopy(numbers)#深拷贝
numbers1.append(100)
print(numbers,new_number)
print(new_numbers2)
输出结果是:[[1, 2, 100], 3, 4, 'abc'] [[1, 2, 100], 3, 4, 'abc']
[[1, 2], 3, 4, 'abc']
六.元祖
元祖就是不可变的列表,即只支持和查相关的操作,不支持增,删,改
1.声明元祖(tuple)
print(tuple1,type(tuple1))
#输出结果为:(1, 2, 'avx', True, [1, 2])
注意:如果要写一个元祖字面量,元祖元素个数是1的字面量,需要在那个元素后面加逗号
t2 = (100,)
()代表空的元祖
2.和查相关的操作
t3 = ('red','yellow','green','pink')
print(t3[2])
print(t3[0:3])
#输出结果是:green
('red', 'yellow', 'green')
与列表的操作相同
3.特殊操作
(1)通过两个变量来获取元祖中唯一的两个元素的值
tuple1 = (100,200)
x,y = tuple1
print(x,y)
#输出结果为:100 200
(2)变量名前加*,同时获取元祖/列表中的多个数据,结果是列表
user = ('小吕',90,98,70,100,'男')
name, *score, sex = user
print(name,score,sex)
#输出结果为:小吕 [90, 98, 70, 100] 男
4.多个值之间用逗号隔开,对应的数据也是元祖
a = 1,2,3,4 相当于a = (1,2,3,4)
x,y =100,200 相当于x,y=(100,200)