列表
定义列表:
(1)空列表
# []
list1 = []
(2)有内容列表
# ['A','B','C'] ,[1,2,3],[1.1,2.2,3.3],[[],[],[],[]]
list2 = ['老师', '学生', '主任', '校长']
获取列表元素
(1)通过索引(下标)
list2 = ['老师', '学生', '主任', '校长']
print(list2[1])
# 输出结果学生
切片(字符串切片相同)
list2 = ['老师', '学生', '主任', '校长']
print(list2[:2])
# 打印结果为['老师', '学生']
增加
(1)添加元素:append 追加 在列表的末尾增加一个元素
list1 = []
list1.append('数据1')
print(list1)
# 运行结果['数据1']
list1.append('数据2')
list1.append('数据3')
list1.append('数据4')
# 运行结果['数据1', '数据2', '数据3', '数据4']
(2)两个列表进行合并可以使用+ 或者 extend
list1 = ['数据1', '数据2', '数据3', '数据4']
list2 = ['老师', '学生', '主任', '校长']
# list1 = list1 + list2 # 可以用 +
list1.extend(list2) # 可以用extend`
print(list1)
# 运行结果['数据1', '数据2', '数据3', '数据4', '老师', '学生', '主任', '校长']
案例:
'''
买多件
商品 名称 价格
'''
container = [] # 存多件商品的容器
flag = True
money = 0
count = 0
while flag:
# 添加商品
name = input('商品名称:')
price = input('商品价格:')
num = input('商品个数:')
goods = [name, price, num]
container.append(goods)
answer = input('是否继续添加?(Q或者q退出)')
if answer.lower() == 'q':
flag = False
print('*' * 20)
print('名称\t价格\t数量')
for goods in container:
print('{}\t{}\t{}\t'.format(goods[0], float(goods[1]), int(goods[2])))
money += float(goods[1]) * int(goods[2])
count += int(goods[2])
print('共购买了{}件商品,总消费金额{}元'.format(count, money))
(3)instert
相比于append添加在列表的末尾,insert就好比插队,可以指定位置添加元素
格式:insert(下标,元素内容)
案例:
list1 = ['老师', '学生', '主任']
list1.insert(1,'校长')
print(list1)
# 输出结果['老师', '校长', '学生', '主任']
删除
(1)pop
使用方式:
pop(index) 根据下标删除列表中的元素,下标要注意不要超出范围。pop也可以不添加然后参数,默认从后往前依次删除
案例:
list1 = ['老师', '学生', '主任', '校长']
list1.pop(-1)
print(list1)
# 输出结果['老师', '学生', '主任']
list1.pop()
print(list1)
# 输出结果['老师', '学生']
(2)remove
使用方式:
remove(element) 根据元素名称进行删除,如果删除的元素在列表中不存在,则会报错list.remove(x): x not in list.
案例:
list1 = ['老师', '学生', '主任', '校长']
list1.remove('主任')
print(list1)
# 输出结果['老师', '学生', '校长']
in关键字:
一般我们使用的时候会先判断list里是否存在要删除的元素,可以使用in关键字,存在后在使用remove进行删除
list1 = ['老师', '学生', '主任', '校长']
if '老师' in list1:
print('存在')
else:
print('不存在')
注意:如果列表中存在多个同名的元素element,只删除遇到的第一个元素,后面的元素不会被删除。如果都删除的话可以考虑循环的方式。循环还会有漏删的情况!!
# 漏删的情况
list1 = ['老师', '学生', '主任', '校长', '校长', '校长', '学生', '校长']
for i in list1:
if i == '校长':
list1.remove(i)
print(list1)
# 输出结果为['老师', '学生', '主任', '学生', '校长']
解决此问题可以使用以下方式,当然还有很多其他方式。
while循环:
list1 = ['老师', '学生', '主任', '校长', '校长', '校长', '学生', '校长']
n = 0
while n < len(list1):
if list1[n] == '校长':
list1.remove('校长')
else:
n += 1
print(list1)
# 输出结果['老师', '学生', '主任', '学生']
for循环:
list1 = ['老师', '学生', '主任', '校长', '校长', '校长', '学生', '校长']
del_content = '校长'
list2 = []
for i in list1:
if del_content != i:
list2.append(i)
list1 = list2
print(list1)
# 输出结果['老师', '学生', '主任', '学生']
(3)clear
使用方式:
clear() 不需要参数 直接清空列表元素。
(4)del
使用方式:
与pop相似,也是传下标位置
案例:
list1 = ['老师', '学生', '主任']
del list1[2]
print(list1)
# 输出结果['老师', '学生']
如果del与下标一起使用代表删除内容,如果直接del list1 则删除list1变量的指针,导致list1不在存在。
那为什么会有这种情况呢? 可以看下方内存部分!
修改
直接使用 list[下标] = 值,修改元素我们可以配合index一起使用。
查找
(1)可以使用in关键字。
(2)元素比较多的情况,我们可以使用index(值) 来找到对应的下标,如果没有此元素则报错。
(3)通过count('元素')来计数,返回整数 如果此元素不存在返回0,如果存在则返回元素个数。
内存
案例:
list1 = ['老师', '学生', '主任']
list2 = list1
list2.append("校长")
print(list1)
print(list2)
注意:输出结果都为['老师', '学生', '主任', '校长']
个人理解与字符串一致,开辟了一个内存空间用来存放list,我们可以通过id打印list的地址,在调用list2=list1时 实际上是把地址给list2,那么list2使用append函数增加元素时,是在同一个地址下增加的,所以list1、list2操作的是同一个地址的列表,输出结果一致。
那如果使用del删除list时,相当于删除list的指针,list没有指针指向就会被回收,所以list就不存在了,而clear只是删除list内容。
排序和翻转
排序:sort
使用方法:
sort()默认是升序的 reverse 为False,还可以这样使用sort(reverse = True) 控制降序。
案例:
list1 = [10, 4, 6, 20, 17, 3, 5, 1]
list1.sort()
print(list1)
# 输出结果 [1, 3, 4, 5, 6, 10, 17, 20]
list1.sort(reverse=True)
print(list1)
# 输出结果 [20, 17, 10, 6, 5, 4, 3, 1]
排序:reverse
使用方法:
reverse()没有排序,只有翻转效果
案例
list1 = [10, 4, 6, 20, 17, 3, 5, 1]
list1.reverse()
print(list1)
# 输出结果 [1, 5, 3, 17, 20, 6, 4, 10]