列表是Python中最基本的数据结构。列表中的每个元素都分配一个数字 - -即它的位置(或索引),第一个索引是0,第二个索引是1,依此类推。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
nameList = ['xiaoming','xiaohong',1222]
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
列表的访问
使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:
# 访问
nameList = ['xiaoming','xiaohong',1222]
print(nameList[0])
print(nameList[0:1])
运行结果
对于列表的打印,除了可以使用print函数直接输出,也可以使用for和while循环的方式遍历列表进行打印,如下所示:
# for循环遍历
for name in nameList:
print(name)
# while循环遍历
i = 0
while i<len(nameList):
print(nameList[i])
i+=1
运行结果
从运行结果中可以看出,循环的方式其实是对列表中的每个元素进行了打印,区别于上述对整个列表的打印
列表的常见操作
添加元素操作
1. append()
append函数可以将元素添加到一个列表的末尾,如下所示:
# 1.添加元素 append
A = ['xiaoming','xiaohong',1222]
temp = input("请输入学生姓名")
A.append(temp)
print(A)
运行结果
2. extend()
extend函数可以将另一个元素逐一添加到列表中,如下所示:
# 2.extend() 可以将另一个元素逐一追加到列表中
a = [1, 2]
b = [3, 4]
a.append(b)
print(a)
a.extend(b)
print(a)
运行结果
从运行结果中我们能很明显的看出extend函数与append函数的区别:append函数将要添加的列表看成一个整体,将其作为一个新元素添加到已有列表中;extend函数将要添加的列表中的每个元素看成一个整体,将其分别添加进已有列表中。
3. insert()
insert函数可以将另一个元素添加到列表中的指定位置,如下所示:
# 3.insert() 在指定位置插入元素
a = [0, 1, 2]
a.insert(1,3)
print(a)
a.insert(-1,6)
print(a)
运行结果
运行结果中可以发现,当指定的位置为-1时(即最后一个元素),insert函数并没有将元素添加到最后的位置,而是添加到了倒数第二的位置,由此可以看出insert的工作原理是将指定插入位置及其以后的元素集体后移一位,然后再将要插入元素赋值给指定位置。
因此上述语句等价于
a.insert(3,6)
那么如何向列表的末尾添加元素呢?
其一:使用append函数
其二:将元素插入位置指定为最后一个元素下标+1,如下所示:
a = [0, 1, 2]
a.insert(3,3)
print(a)
运行结果
这是可以看到元素3被添加到列表的末尾
但同时又产生了一个新的问题,我们知道上述定义的列表a的长度为3,即其下标范围为0-2,使用插入位置3显然算是一种越界行为,那么我们将大于等于列表长度的指定位置填入insert函数中会出现什么问题呢
示例
a = [0, 1, 2]
a.insert(100,3)
print(a)
a.insert(100,8)
print(a)
a.insert(101,6)
print(a)
运行结果
很明显,这些元素无一例外地被添加到列表的末尾
修改操作
通过赋值语句可以十分简便的对列表指定元素进行修改
# 修改操作
A = ['xiaoming','xiaohong',1222]
A[1] = '小红'
print(A)
运行结果
查询操作
1. in/not in
当指定元素存在数组中时,返回True,否则返回False
# 查询 in
nameList = ['xiaoming','xiaohong',1222]
findName = 'xiaoming'
if findName in nameList:
print("您要找到人在列表中")
else:
print("没找到")
findName = 'Alloman'
if findName in nameList:
print("您要找到人在列表中")
else:
print("没找到")
运行结果
2. index()
从列表中找出某个值第一个匹配项的索引位置
a = ['a', 'b', 'c', 'a', 'b']
index = a.index('a')
print(index)
运行结果
3. count()
统计某个元素在列表中出现的次数
a = ['a', 'b', 'c', 'a', 'b']
count = a.count('a')
print(count)
运行结果
删除操作
# 删除
nameList = ['xiaoming','xiaohong',1222]
# del 根据下标删除
del nameList[2]
print(nameList)
# pop 删除最后一个元素
nameList.pop()
print(nameList)
# remove 根据元素的值进行删除
nameList.remove('xiaoming')
print(nameList)
运行结果
排序操作
# 排序
a = [1, 4, 2, 3]
# 正序 reverse=True的逆序
a.sort()
print(a)
a.sort(reverse=True)
print(a)
运行结果
当sort函数中的reverse参数被指定为True时,将对列表进行降序排序
逆序操作
# 逆序
a = [1, 4, 2, 3]
a.reverse()
print(a)
运行结果
列表应用实例--教师办公室分配问题
一个学校,有三个办公室, 8位老师等待分配工位,完成随机分配
# schoolNames = [['北京大学','清华大学'],
# ['南开大学','天津大学','天津师范大学'],
# ['山东大学','中国海洋大学']]
# 一维 向量 Vector
# 二维 矩阵 matrix
# 一个学校,有三个办公室, 8位老师等待分配工位,完成随机分配
import string
import random
# 定义一个列表来保存3个办公室
offices = [[],[],[]]
# 定义一个列表来存储教师的名字
names = []
for i in range(8):
names.append(string.ascii_uppercase[i])
for name in names:
index = random.randint(0, 2)
offices[index].append(name)
# 遍历展示
i = 1
for tempNames in offices:
print("办公室%d的人数为%d"%(i, len(tempNames)))
i+=1
for name in tempNames:
print("%s"%name, end='')
print('\n')
print("-"*30)
运行结果