一、列表list
1. 概述
特点
:有序,元素不唯一
变量:使用变量存储数据,但是,缺点:一个变量每次只能存储一个数据
思考:如果一次性存储多个数据,怎么做?
解决:采用列表
作用:列表相当于是一个容器,可以同时存储多个数据
本质:列表是一种有序的集合
说明:有序指的就是有顺序【数据的存放的顺序和底层存储的顺序是相同的】
2. list的基本使用
2.1 创建列表
语法:列表名【标识符】 = [元素1,元素2.。。。。]
代码演示:
#1.创建列表
#1.1创建一个空列表
list1 = []
print(list1)
#1.2创建一个带有元素的列表
ages = [1, 2, 3, 4, 5]
ages = [1, 2, [3, 4],True, 5] # 可以存不同类型的元素
2.2 获取元素
语法:列表名[索引]
代码演示
ages = [1, 2, 3, 4, 5]
print(ages[0])
print(ages[1])
# print(ages[5]) # 报错:列表下标越界 IndexError: list index out of range
print(ages[-1]) # 倒数第一个
print(ages[-2]) # 倒数第三个
2.3 获取列表长度
print(len(ages))
2.4 遍历列表
ages = [11, 22, 33, 44, 55]
for n in ages:
print(n) # 元素
for i in range(len(ages)):
print(ages[i]) # 元素
for i, n in enumerate(ages): # 枚举/列表
print(i, n) # 下标和元素
# 从后往前遍历
for i in range(len(ages)-1, -1, -1):
print(i, ages)
2.5 切片,截取
#切片,截取 [start:stop:step] => 范围【start,stop) 包含start,不包含stop
ages = [1,2,3,4,5,6,7,8,9]
print(ages[:]) # [1,2,3,4,5,6,7,8,9]
print(ages[3:]) # [4, 5, 6, 7, 8, 9]
print(ages[:4]) # [1, 2, 3, 4]
print(ages[4:7]) # [5, 6, 7]
print(ages[::-1]) # 倒序 [9, 8, 7, 6, 5, 4, 3, 2, 1]
print(ages[::2]) # [1, 3, 5, 7, 9] 隔一个取
2.6 重复
print([1,2,3]*3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
2.7判断列表成员
print(4 in ages) # True
print(4 not in ages) # False
2.8 合并列表
print([1,2,3]+[4,5,6]) # [1, 2, 3, 4, 5, 6]
2.9 删除列表元素
ages = [1,2,3,4,5,6,7,8,9]
del ages[0]
print(ages) # [2, 3, 4, 5, 6, 7, 8, 9]
3 列表的方法
列表的方法主要就是一些增、删、改、查等操作
3.1 添加元素
append():在列表末尾插入一个元素
insert(index,args): 在指定位置插入一个元素
extend():将一个列表中的每一个元素都添加到列表末尾
代码演示:
# append(): 在列表的末尾插入元素
nums = [2, 3, 4]
nums.append(5)
print(nums) # [2, 3, 4, 5]
# insert(i, n): 在列表的指定下标位置插入元素
nums = [2, 3, 4]
# nums.insert(0, 5) # [5, 2, 3, 4]
nums.insert(2, 5) # [2, 3, 5, 4]
print(nums)
# extend(): 将一个列表中的每个元素都添加到列表末尾
nums = [2, 3, 4]
nums.extend([5,6,7]) # [2, 3, 4, 5, 6, 7]
# nums.append([5,6,7]) # [2, 3, 4, [5, 6, 7]]
print(nums)
3.2 删除元素
pop(index):根据下标删除对应的元素,默认是删除最后一个
remove(n):删除指定的第一个元素
del: 删除列表,删除不干净,不建议用
clean(): 清空列表中的所有元素
代码演示:
# pop(i):根据下标删除对应的元素
start = ["海绵宝宝", "派大星", "蟹老板", "章鱼哥", "珊迪"]
# start.pop() # ['海绵宝宝', '派大星', '蟹老板', '章鱼哥']
n = start.pop(1) # ['海绵宝宝', '蟹老板', '章鱼哥', '珊迪']
print(start)
print(n) # 派大星 n 是删除的那个元素
# remove(n):删除指定的第一个元素
nums = [1, 2, 3, 3, 2, 2, 3, 2, 1]
nums.remove(2) # [1, 3, 3, 2, 2, 3, 2, 1]
print(nums)
# del:删除不彻底
nums = [1,2,3,4,5,6,7]
nums2 = nums
# del nums
# print(nums) # NameError: name 'nums' is not defined
# print(nums2) # del 只是删除变量名字,内容并没有删除,还存在地址中
del nums[2:5]
print(nums) # [1, 2, 6, 7]
# clean():清空列表
nums = [1,2,3,4,5,6,7]
nums.clear()
print(nums) # []
3.3 修改元素
nums = [1,2,3,4,5,6,7]
nums[0] = 11
print(nums)
3.4 查
index( ):找到列表中第一次出现元素的下标,如果不存在报错
count( ):统计指定元素在列表中出现的次数
代码演示:
# index(): 找到列表中第一次出现元素的下标,如果不存在报错
l = [1,2,3,4,5,67,8,9]
print(l.index(2)) # 1
# 统计指定元素在列表中出现的次数
nums = [1, 2, 3, 3, 2, 2, 3, 2, 1]
print(nums.count(2)) # 3
3.5 排序
sort(): 升序(从小到大),会改变原列表
sort(reverse=True): 降序(从大到小),会改变原列表
sorted(): 升序(从小到大), 不会改变原列表
sorted(reverse=True): 升序(从小到大), 不会改变原列表
reverse(): 倒序会改变原列表
reversed(): 倒序,不会改变原列表
代码演示:
# sort(): 升序(从小到大),会改变原列表
ages = [1,3,4,-6,5, 88,2]
ages.sort()
print(ages) # [-6, 1, 2, 3, 4, 5, 88]
# sort(reverse=True): 降序(从大到小),会改变原列表
ages = [1,3,4,-6,5, 88,2]
ages.sort(reverse=True)
print(ages) # [88, 5, 4, 3, 2, 1, -6]
# sorted(): 升序(从小到大), 不会改变原列表
ages = [1,3,4,-6,5, 88,2]
ages2 = sorted(ages)
print(ages,ages2) # [1, 3, 4, -6, 5, 88, 2] [-6, 1, 2, 3, 4, 5, 88]
# sorted(reverse=True): 升序(从小到大), 不会改变原列表
ages = [1,3,4,-6,5, 88,2]
ages2 = sorted(ages, reverse=True)
print(ages,ages2) # [1, 3, 4, -6, 5, 88, 2] [88, 5, 4, 3, 2, 1, -6]
# 倒序/逆序/反转
ages = [1,3,4,-6,5, 88,2]
# print(ages[::-1]) # [2, 88, 5, -6, 4, 3, 1]
# reverse(): 倒序会改变原列表
ages.reverse()
print(ages) # [2, 88, 5, -6, 4, 3, 1]
# reversed(): 倒序,不会改变原列表
ages = [1,3,4,-6,5, 88,2]
ages2 = reversed(ages)
print(ages,list(ages2)) # [1, 3, 4, -6, 5, 88, 2] [2, 88, 5, -6, 4, 3, 1]
print(id(ages),id(ages2)) # 1448518400904 1448519147984
3.6 浅拷贝和深拷贝
copy() :浅拷贝, 只能拷贝第一层,二维列表拷贝不了
copy.deepcopy():深拷贝,内容完全拷贝
# 浅拷贝/浅复制
nums1 = [1,2,3]
nums2 = nums1.copy()
nums1[1] = 99
print(nums1) # [[1, 99, 3]
print(nums2) # [1, 2, 3]
# 深拷贝/深复制
num3 = [1, 2, 3, [4, 5, 6]]
num4 = num3.copy() # 浅拷贝, 只能拷贝第一层,二维列表拷贝不了
num3[1] = 99
num3[-1][1] = 100
print(num3) # [1, 99, 3, [4, 100, 6]]
print(num4) # [1, 2, 3, [4, 100, 6]]
import copy
num3 = [1, 2, 3, [4, 5, 6]]
num4 = copy.deepcopy(num3) # 深拷贝,二位列表内容也被复制
num3[-1][1] = 100
print(num3) # [1, 2, 3, [4, 100, 6]]
print(num4) # [1, 2, 3, [4, 5, 6]]
二、随机数
import random
randint(start, stop)::从范围【start, stop】中随机取一个数,特例:两边都包含
randrange(start, stop)::从范围【start, stop)中随机取一个数
choice():从指定的列表中(序列)随机获取一个
random(): 从范围【0,1)中随机取一个小数
shuffle():打乱列表
代码演示:
# randint(start, stop): 从范围【start, stop】中随机取一个数,特例:两边都包含
# randrange(start, stop): 从范围【start, stop)中随机取一个数
print(random.randint(1,5)) # 范围 1 2 3 4 5
print(random.randrange(1,10,2)) # 范围 1 3 5 7 9
# choice(): 从指定的列表中(序列)随机获取一个
start = ["海绵宝宝", "派大星", "蟹老板", "章鱼哥", "珊迪"]
print(random.choice(start))
# random(): 从范围【0,1)中随机取一个小数
print(random.random())
print(random.uniform(2,4)) # 从【2,4】 取一个随机的小数
# shuffle(): 打乱列表
l = [1,2,3,4,5]
random.shuffle(l)
print(l)