列表
在python中,有这样⼀些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为有序序列,包括:列表、range、元组和字符串;其中列表的成员可修改,属于可变序列,字符串和元组,成员不可修改,属于不可变序列。序列有共同操作:
通用操作
1.列表组合 将两个列表拼接为一个列表
#直接使用加号
list1 = [43,65,76,6]
list2 = [45,77,90,11,2,4,66]
print(list1 + list2) #[43,65,76,6,45,77,90,11,2,4,66] 产生一个新列表
2.列表重复
#直接使用乘号 列表内容重复指定遍数,产生一个新列表
print(list1 * 2) # [43,65,76,6,43,65,76,6]
3.成员操作
成员运算符:in not in
#运算的结果为布尔值
list3 = ["hello",False,189,"good"]
print(189 in list3) #True
print(180 not in list3) #True
4.获取列表元素个数
print(len(list1))#4
切片
"""
-6 -5 -4 -3 -2 -1 从右向左
[10, 20, 30, 40, 50, 60]
0 1 2 3 4 5 从左向右
"""
"""
list[start:end:step]
# start是起始下表,start默认是0
# end的是结束下表,不包括结束下标所指元素:包头不包尾;
# step : 步长,默认是1
# step>0,从左向右取,step等于取连续元素,如果为2
# step <0 从右向左
"""
list1 = [10,20,30,40,50,60]
print(list1[0:3]) #[10,20,30]
print(list1[:3]) #[10,20,30]
print(list1[:]) #[10,20,30,40,50,60] 从头取到尾
print(list1[::2]) # [10,30,50] 隔一个取一个
print(list1[3::-1]) #[40, 30, 20, 10] 从右向左取
print(list1[-1:-3:-1]) #[60, 50] 从右向左取
print(list1[2:]) #[30, 40, 50, 60] 从下标为2的元素开始取到末尾
print(list1[-3::-1])#[40, 30, 20, 10] 从右向左取到第一个元素
列表最大值和最小值、求和
print(max(list1))#最大值
print(min(list1))#最小值
print(sum(list1))#求和
列表遍历
列表的遍历就是访问列表的每一个元素,可以使用while循环和for-in循环。经常使用for-in循环遍历列表
for-in语法:
for 变量名 in 列表:
语句块A
else:
语句块B
说明:主要用于遍历序列【遍历:依次访问序列中的每一个元素,获取元素值】
注意:不要在for-in循环中添加或删除元素
列表的增删改查
增加元素
append: 在列表末尾增加一个元素
extend: 在列表末尾增加多个元素
insert: 在下标指定的位置增加元素
- list.append(元素)
a = []
a.append(10)
a.append(20)
a.append(10.5)
a.append([40,50])
print(a)
2 list.extend([10,20,30]) # 参数必须是集合或可迭代对象
a.extend(10) # 错误,10不可迭代(可以用for-in遍历的就是可迭代)
a.extend([10,20,30])
a.extend("hello")
print(a)
3 list.insert(下标,元素) 在指定的下标位置插入一个新的元素,原来的元素后移
a.insert(0,10)
a.insert(0,20)
a.insert(0,30)
a.insert(10,90) # 如果下标大于等于列表长度,就在列表末尾插入一个新元素
a.insert(-1,80)
print(a)
删除元素
pop :按下标删除
remove: 按元素值删除
del :可以删除多个元素,也可以删除指定元素
clear :清空列表
1. list.pop(i) # i默认是-1 ,如果不指定下标,默认删除最后一个;指定i的值就删除下标i所指定的元素
a = [10,20,50,30,40,50,60]
a.pop() # 删除最后一个元素
a.pop(0) # 删除第一个
# a.pop(100) # 如果下标越界,报IndexError: pop index out of range
print(a)
2 list.remove(value) 从左向右找到第一个等于value元素删除,找不到报错
a.remove(50)
a.remove # ValueError: list.remove(x): x not in list
if 100 in a:
a.remove(100)
print(a)
3.del
按下标删除
a = [10,20,50,30,40,50,60]
del a[0]
按范围删除
del a[1:4]
print(a)
删除列表
del a
print(a)
4.list.clear() 清空列表元素
a = [10,20,50,30,40,50,60]
a.clear()
print(a)
下标不能越界,也就是说如果列表只有6个元素,不可取第七个,否则就报错
print(list1[6]) # IndexError: list index out of range
修改元素
list1[0] = 1000
print(list1)
查找元素
1.in 判断一个元素是否存在列表中
list.index(元素) 查找元素在列表中的下标(大于等于0),如果元素不存在,则报错
2. index从左向右查找,找到第一个等于指定值得元素就终止
a = [10,20,50,30,40,50,60]
index = a.index(50)
index = a.index(500) # ValueError: 500 is not in list
print(index)
3 list.count(value) 返回列表中元素的值等于value的元素个数
print(a.count(50)) # 2
print(a.count(500)) # 0
4.读取列表元素 按下标读取
list1 = [10,20,30,'hello',10.5]
print(list1[0],list1[1],list1[2])
#10,20,30
列表反转
a.reverse()
print(a)
列表排序
a = [10,20,50,30,40,50,60]
a.sort() # 默认从小到大排序
a.sort(reverse=True) # 从大到小
print(a)
随机列表元素
from random import choice, shuffle, randint
choice返回集合中一个随机元素
a = [10,20,30,30,40,50,60]
res = choice(a)
print(choice(a))
print(a[randint(0,len(a)-1)])
shuffle打乱元素顺序,没有返回值
shuffle(a) # 修改列表元素的排列顺序,没有返回值
print(a)
列表推导式
特点
产生新列表,运算速度快,语法简洁,够装逼。
[表达式 for value in 可迭代对象]
表达式可以是任何合法的表达式,但不能写if语句,while、for-in语句
res = [value for value in range(0,100,2)]
print(res)
等价语法
a = []
for value in range(0,100,2):
a.append(value)
print(a)
print([value ** 0.5 for value in range(100)])
print([randint(10,100) for i in range(10)])
#求所有两位数的数字之和构成列表
print([value // 10 + value % 10 for value in range(10,100)])
#求1-10所有数的平方构成的列表
print([i*i for i in range(1,11)])
#求所有的水仙花数
print([value for value in range(100,1000) if (value//100)**3 + (value//10%10)**3 + (value%10)**3 == value])
二维列表
定义
每一个元素还是一个列表,这种列表称为二维列表
如:
a = [[1,2],[3,4],[5,6]]
按元素遍历
for i in a:
for j in i:
print(j,end=" ")
print()
按下标遍历
for i in range(3):
print(a[i])
标的序列
print(a[i][j],end=" ")
print()
冒泡排序
一趟排序: 相邻两个元素比较,逆序则交换
a = [10,70,50,30,40,50,60]
从小到大重新排序
a = [10,70,50,30,40,50,60]
for i in range(0,len(a)-1):
if a[i] > a[i+1]:
a[i], a[i+1] = a[i+1],a[i]
# print(a)
for j in range(0,len(a)-1):
for i in range(0, len(a) - 1):
if a[i] > a[i + 1]:
a[i], a[i + 1] = a[i + 1], a[i]
print(a)
改进1: 不和已经有序元素比较
for j in range(0,len(a)-1):
for i in range(0, len(a) - 1 - j):
if a[i] > a[i + 1]:
a[i], a[i + 1] = a[i + 1], a[i]
for j in range(0,len(a)-1):
flag = True # 假定列表有序
for i in range(0, len(a) - 1 - j):
if a[i] > a[i + 1]:
a[i], a[i + 1] = a[i + 1], a[i]
flag = False
# 如果已经有序,终止循环
if flag:
break
print(a)