一、列表
数据类型:数字类型、字符串、列表、字典、元祖、集合、迭代器、生成器、函数
1、什么是列表(list)
相当于其他语言的数组。
列表是Python提供的容器型数据类型。可变并且有序。
可变 - 列表中的每个元素的值可变,列表的长度可变,列表中的顺序可变。(支持增、删、改)
有序 - 每个元素可以通过下标来确定位置
2、列表的字面量
通过[]括起来,里面有多多个元素,每个元素用逗号隔开。
例如:
# 用逗号隔开的是列表的元素
[1, 2, 3]
# Python列表中的元素可以是任何Python支持的类型
# 并且同一个列表中不同元素的类型可以不一样
[10, 'abc', True]
# 任何类型的数据都可以作为列表的元素
a = 10
list1 = [a, 132, 'abc', True, 10.23, [1, 2], {'a':10}]
# 空列表
[]
3、获取列表元素
和字符串获取字符的语法一样
a、获取单个元素
列表[下标] # 获取列表中指定下标对应的元素
例:
list1 = [1, 2, 3, 4]
print(list1[0]) # 1
print(list1[-1]) # 4
b、获取部分元素(切片)
字符串的结果都是新的字符串,列表的结果是列表。
语法:
列表[开始下标:结束下标:步长]
例子:
list1 = ['a', 'b', 'c', 'd', 'e']
print(list1[1:3])
print(list1[-3:3])
print(list1[:2])
print(list1[::-1])
c、一个一个的取出所有元素(遍历)
方法一:可以使用for循环直接遍历列表拿到每个元素。
操作元素的时候与下标无关用此方式。
list1 = ['a', 'b', 'c', 'd', 'e']
for item in list1:
print(item)
方法二:通过遍历列表中列表元素的下标来遍历列表元素。
操作元素的时候和下标有关用此方式。
list1 = ['a', 'b', 'c', 'd', 'e']
for index in range(len(list1)):
print(list1[index])
二、增删改
1、增(添加列表元素)
a、append
在指定的列表的最后添加指定的元素。
列表.append(元素)
例:
list1 = [1, 2, 3, 4, 5]
list1.append(6)
print(list1) # [1, 2, 3, 4, 5, 6]
b、insert
在指定的下标前插入指定的元素。
列表.insert(下标, 元素)
例:
list1 = [1, 2, 3, 4, 5]
list1.insert(3, 3.5)
print(list1) # [1, 2, 3, 3.5, 4, 5]
2、删
a、del
删除指定下标的元素,del是关键字,可以删除任何东西。
如果不加下标就删除整个列表。
注意:如果下标越界就会报错。
del 列表[下标]
del 列表
例:
list1 = [1, 2, 3, 4, 5]
del list1[0]
print(list1) # [2, 3, 4, 5]
注意:不管增加还是删除都是在原列表做改动,下标会重新分配。
b、remove
不是通过下标来删除,是通过元素来删,如果没有此元素程序报错。
列表.remove(元素)
例1:
list1 = [1, 2, 3, 4, 5]
list1.remove(5)
print(list1) # [1, 2, 3, 4]
例2:
list1 = [1, 2, 5, 4, 5]
list1.remove(5)
print(list1) # [1, 2, 4, 5]
注意:remove删除元素时,有几个一样的元素,只删从左往右的第一个。
c、pop
相对于del 和 remove 来说,pop删除时,有返回值(返回的是被删除的元素);而del 和 remove没有返回值
列表.pop()
列表.pop(下标)
不带参数时,pop将列表中最后一个元素从列表中取出;
带下标时,pop将列表中指定下标对应的元素从列表中取出。
list1 = [1, 2, 3, 4, 5, 5]
num1 = list1.pop(0)
print(num1)
print(list1)
删除元素时遇到的两个坑
-
坑一:用元素遍历
会遇到的问题:遍历列表删除部分元素,删不全!
# 下标遍历有误
age_list = [14, 9, 33, 44]
for index in range(len(age_list)):
age = age_list[index]
if age < 18:
age_list.pop(index)
print(age_list)
# 解决方案:遍历的时候段原列表切边复制
# 创建新的列表来保存年龄,来保证删除时下标变动
# 遍历没有变动的元素
# 要用remove根据元素来删除
age_list = [1, 2, 33, 44]
temp = age_list[:]
for age in temp:
if age < 18:
age_list.remove(age)
print(age_list)
-
坑二:下标遍历
会遇到的问题:删不全,而且还会越界。
# 以下代码不能实现功能
for index in range(len(age_list)):
age = age_list[index]
if age < 18:
age_list.pop(index)
print(age_list)
# 通过while循环控制循环次数,有删除时下标不变。
age_list = [14, 9, 33, 44]
index = 0
new_ages = [] #新列表接收删除的元素
while index < len(age_list):
age = age_list[index]
if age < 18:
del_item = age_list.pop(index)
new_ages.append(del_item)
else:
index += 1
print(age_list, new_ages)
3、改
列表[下标] = 新值
修改列表中指定下标对应的值
list1 = [1, 2, 3]
list1[0] = 'abc'
print(list1) # ['abc', 2, 3]
例子:有一个列表保存的学生的成绩,要求低于60分的改成“下一个班见”,并且统计下人数。
count = 0
scores = [11, 22, 33, 66, 77, 88]
for index in range(len(scores)):
if scores[index] < 60:
count += 1
scores[index] = '下一个班见'
print('下一个班见人数共有%d人'%count)
print(scores)
三、列表的相关运算
1、相关运算:
a、支持+,*运算
列表1 + 列表2
将两个列表中的元素合并在一起产生一个新的列表。
print([1, 2, 3] + ['a', 'b', 'c'])
# [1, 2, 3, 'a', 'b', 'c']
列表*N
将列表中的元素重复N次,产生一个新的列表
b、支持比较运算
比较大写与字符串比较大小相似。
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 == list2) # True
print(list1 == [1, 3, 2]) # False
2、in 和 not in
元素 in 列表
判断列表中是否存在指定的元素
print([1, 2] in [1, 2, 3]) # False
3、len
len(列表)
获取列表中元素的个数。
print(len([[1, 2], 2, 'a', 'agc'])) #4
4、list
只有序列才可以转换成列表,并且所有的序列都可以转换成列表
list(数据)
转换的时候就是将序列中所有的元素转换成列表的元素
list1 = list('hello')
print(list1) # ['h', 'e', 'l', 'l', 'o']
list2 = list(range(10, 20))
print(list2) # [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
注意:不能用Python给我们提供的类型的名字来命名,否则会有隐患。
5、序列其他方法
max(序列) # 获取序列中值最大的元素
min(序列) # 获取序列中值最小的元素
sum(序列) # 求序列中所有元素的和
注意:以上三个方法,要求序列中的元素类型必须一致,并且这个类型支持运算和加法运算。(一般是数字序列使用)
print(max([1, 2, 3, 3, 5, 5, 9]))
print(min([1, 2, 3, 3, 5, 5, 9]))
print(sum(range(101))) # 计算1到100的和