列表是由一系列按特定顺序排列的元素组成, 是 python 中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表、字典(即嵌套)。
用([])来表示列表,并用逗号(,)分隔各个元素。
在学习列表之前,先学习一个函数,range()函数:
1 l = range(6)
2 print(l)
3 print(type(l))
输出结果:
range(0, 6)
<class 'range'>
只是这样是看不出来这个函数到底有什么用,又可以用来干什么的,那么如果在for循环中使用range()函数,又会发生什么呢?
1 for value in range(6):
2 print(value)
输出结果:
0
1
2
3
4
5
可以看出,,使用for循环输出了0-5,这说明range()函数可以产生0-5的整数列表。
range()函数的完整语法:
range(start, stop, [, step ]) # 这是什么意思?直接上示例:
1 for value in range(1, 6, 2):
2 print(value)
输出结果:
1
3
5
对比上个程序可以看出:
start表示开始计数的位置,默认是0,
stop表示截止位置,不包括这一位,
step表示间隔几个数,即步长。
再看下面的程序:
1 for value in range(1, -6, -2):
2 print(value)
输出结果:
1
-1
-3
-5
可以看出range()也可以产生负数,其中步长需为负的。
下面来开始学习列表:
(1)直接创建
1 list = [a, c, f, g, b, e , h, d]
(2)使用range()函数
1 list = list(range(6))
(3)使用for和range()函数
1 list = []
2 for i in range(6):
3 list.append(i)
(4)列表解析
1 list = [value for value in range(6)]
(1)增加元素
在列表的末尾添加元素
1 list = [0, 1, 2, 3, 4, 5]
2 list.append(6)
3 # list1.append(0, 1) #只能有一个参数
4 print(list)
输出结果:
[0, 1, 2, 3, 4, 5, 6]
在指定位置添加元素
1 list = [0, 1, 2, 3, 4, 5]
2 list.insert(1, 1)
3 print(list)
输出结果:
[0, 1, 1, 2, 3, 4, 5]
(2)删除元素
删除指定位置的元素
1 list1 = [0, 1, 2, 3, 4, 5]
2 list2 = [0, 1, 2, 3, 4, 5]
3 del list1[1]
4 print(list1)
5
6 pop_list = list2.pop(1)
7 print(pop_list)
8 print(list2)
输出结果:
[0, 2, 3, 4, 5]
1
[0, 2, 3, 4, 5]
由输出结果可以看出,del是语句删除,没有返回值,删除的元素就算是删除了,而使用list.pop()函数有返回值,返回被删除的值,可以将其赋值给一个变量,以便在下次使用时还可以用。
list.pop()函数可以不填参数,如果不填参数默认删除末尾的元素。
根据值删除
1 list = [0, 1, 2, 1, 3, 4, 5]
2 data = list.remove(1)
3 print(data)
4 print(list)
输出结果:
None
[0, 2, 1, 3, 4, 5]
可以看出,remove()函数删除没有返回值,且如果列表中有重复值,只会删除第一个值。
(3)修改列表元素
1 list = [0, 1, 2, 3, 4, 5]
2 list[0] = 1
3 print(list)
4 list[1:4] = [3, 2, 1] # 要一一对应才行
5 print(list)
6 list[1:4] = [3, 2]
7 print(list)
8 list[1:4] = [3, 2, 1, 6]
9 print(list)
输出结果:
[1, 1, 2, 3, 4, 5]
[1, 3, 2, 1, 4, 5]
[1, 3, 2, 4, 5]
[1, 3, 2, 1, 6, 5]
修改列表元素直接通过下标进行修改,需要注意的是使用list[1:4] = [3, 2, 1]这种形式的时候一定要左右两边对应,左边是几个数,右边也是几个数,如果右边少了,那么少的那位将会被删除。如果右边多了,将会增加元素。
(4)访问列表
1 list1 = [1, 2, 3, 4, 5, 6, 7]
2 print(list1[6]) # 列表的下标是从第0位开始的
3 print(list1[1:5]) # 注意:[1:5]表示取下标为1到下标为5-1的元素。
4 print(list1[2:]) # 输出第2位到最后一位
5 print(list1[:5]) # 输出第0位到第5-1位
6 print(list1[:])
7 print(list1[-1]) # -1表示最后一个元素,-2表示倒数第二个元素,以此类推。
8 print(list1[-2])
9 print(list1[-2:]) # 从末尾开始算起
输出结果:
7
[2, 3, 4, 5]
[3, 4, 5, 6, 7]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6, 7]
7
6
[6, 7]
按字母顺序排列
1 list = ['acb', 'cab', 'fbg', 'fag', 'b', 'e', 'h', 'd']
2 list2 = [1, 4, 7, 2, 5, 8]
3 list.sort() # 按字母顺序排列
4 print(list)
5
6 list.sort(reverse=True) # 按字母倒序排列
7 print(list)
8
9 # list2.sort(list2) # 不能对数字类型的列表排序
输出结果:
['acb', 'b', 'cab', 'd', 'e', 'fag', 'fbg', 'h']
['h', 'fbg', 'fag', 'e', 'd', 'cab', 'b', 'acb']
sort()函数不能对数字类型的列表排序,由结果可以看出,当元素为字符串时,先按首字母参与排序,如果有两个元素首字母相同则比较这两个元素的第二个字母来进行排序。
反转列表元素顺序
1 list = ['acb', 'cab', 'fbg', 'fag', 'b', 'e', 'h', 'd']
2 list.reverse()
3 print(list)
4 list.reverse()
5 print(list)
输出结果:
['d', 'h', 'e', 'b', 'fag', 'fbg', 'cab', 'acb']
['acb', 'cab', 'fbg', 'fag', 'b', 'e', 'h', 'd']
List.reverse() :反转列表元素的排列顺序,再一次使用该函数就变回原来的顺序。
显示排序
1 list = ['acb', 'cab', 'fbg', 'fag', 'b', 'e', 'h', 'd']
2 print(sorted(list))
3 print(list)
输出结果:
['acb', 'b', 'cab', 'd', 'e', 'fag', 'fbg', 'h']
['acb', 'cab', 'fbg', 'fag', 'b', 'e', 'h', 'd']
可以看出sorted()函数只是在输出显示时对列表进行了排序,但是当输出原列表时,原列表并没有改变,这说明该函数的排序对列表的修改不是永久性的,而sort()函数,和reverse()函数对列表的排序修改是永久性的。
for循环遍历列表
1 list = [1, 4, 7, 2, 5, 8]
2 for i in list:
3 print(i)
输出结果:
1
4
7
2
5
8
while循环遍历列表
1 index = 0
2 while index < len(list): # len(x)计算x的长度,在这里指的是列表长度,即元素个数
3 print(list[index])
4 index += 1
输出结果:
1
4
7
2
5
8
计算列表的最大、最小值和总和
list = [1, 4, 7, 2, 5, 8]
print(min(list))
print(max(list))
print(sum(list))
输出结果:
1
8
27
复制列表
1 list = [1, 4, 7, 2, 5, 8]
2 list2 = list[:] # 该种方式复制时,原列表改变时不影响复制的列表
3 list3 = list # 该种方式复制时,当原列表改变时复制列表页改变
4
5 print(list2)
6 print(list3)
7
8 list[2] = 9
9 print("修改后的结果:")
10 print(list)
11 print(list2) # list2没有改变
12 print(list3) # 没有修改list3但是list3也改变了
输出结果:
[1, 4, 7, 2, 5, 8]
[1, 4, 7, 2, 5, 8]
修改后的结果:
[1, 4, 9, 2, 5, 8]
[1, 4, 7, 2, 5, 8]
[1, 4, 9, 2, 5, 8]