查询指定范围数据 切片
# lists = []#声明一个空列表
# print(type(lists))#<class 'list'>
# 列表 list
# 里边若干个元素 用 , 隔开
# python 任何类型都可以放到列表中
# 长度可以无限 可以0个 可以1个 可以多个 上限取决于硬件
lists=[123,12.34,'灭活疫苗',True,[1,2,3],(1,'a'),{'name':'zhangsan'},{1,2,3},None]
print(lists)#查看 [123, 12.34, '灭活疫苗', True, [1, 2, 3], (1, 'a'), {'name': 'zhangsan'}, {1, 2, 3}, None]
print(lists[2])#查看其中一个 根据索引查看元素 索引从0开始 #灭活疫苗
lists[2]='武汉灭活疫苗' #修改
print(lists) #[123, 12.34, '武汉灭活疫苗', True, [1, 2, 3], (1, 'a'), {'name': 'zhangsan'}, {1, 2, 3}, None]
查看指定范围数据 切片
print(lists[2:4])#包含2 不包含4 输出下标 2 3
print(lists[2:4:2]) #起始索引(下标):结束索引(下标):步长 可以写可以不写 默认为1 这里表示步长为2 隔两个取一个
print(lists[:])#取出所有元素 没有起始 没有结束
print(lists[2:])#有起始 没有结束 从下标为2 取到最后 步长为1
print(lists[:4])#没有起始 有结束 从下标0取到4的前一个 步长为1
print(lists[:-1])#-1表示倒数第一个位置 不包含倒数第一个
print(lists[-1])#-1表示最后一个元素
print(lists[-4:-1])#从倒数第四个开始取到倒数第一个 不包括倒数第一 步长为一
print(lists[5:-1])
print(lists[-1:-5]) #因为 从左往右 这里边-5在-1 左边 取不到元素 返回 []空列表
print(lists[2:6:-1])#步长为1的时候从左往右取 -1从右往左取 从2往左取 下标6在右边取不到 返回[]空列表
print(lists[6:2:-1])#[{'name': 'zhangsan'}, (1, 'a'), [1, 2, 3], True]
print(lists[::-1])#从后往前取
增加列表元素
** append insert extend **
#列表就好比我们的行李箱 本来就是保存数据的 顺序是可以变的
#####append 在列表结尾添加元素
heros=['钢铁侠','蜘蛛侠','蝙蝠侠']
print(heros)
#列表.append(元素)
heros.append('无敌女侠')
print(heros)
#######insert在列表中间插入
heros=['钢铁侠','蜘蛛侠','蝙蝠侠']
print(heros)
#列表.insert(指定下标,元素)# 原来的元素向右移动
heros.insert(1,'黑寡妇')
print(heros)
##########extend合并新列表
heros=['钢铁侠','蜘蛛侠','蝙蝠侠']
print(heros)
money = ['基本工资','绩效','项目奖金','全勤奖','过节奖励','年终奖']
#列表.extend(新列表) #把新列表的数据追加到列表中
heros.extend(money)
print(heros)
money.extend(heros)#将heros追加到money列表元素后边
print(money)
删除列表元素
** pop remove del clear **
#pop()默认最后一个 括号里可以传 元素所在的下标
money = ['基本工资','绩效','项目奖金','全勤奖','过节奖励','年终奖','扣除的钱']
print(money)
money.pop()#默认移除最后一个元素
test=money.pop(3)#指定删除下标为3的元素
print(money)#['基本工资', '绩效', '项目奖金', '过节奖励', '年终奖']
print(test)#输出删除的元素 #全勤奖
#remove() 里边传元素 表示直接删除这个元素
money = ['基本工资','绩效','项目奖金','全勤奖','过节奖励','年终奖','扣除的钱']
print(money)
money.remove('全勤奖')
print(money) # ['基本工资', '绩效', '项目奖金', '过节奖励', '年终奖', '扣除的钱']
#del 根据列表删除 del 列表[下标]
money = ['基本工资','绩效','项目奖金','全勤奖','过节奖励','年终奖','扣除的钱']
print(money)
del money[3]
print(money) #['基本工资', '绩效', '项目奖金', '过节奖励', '年终奖', '扣除的钱']
#clear 请空列表
money.clear()
print(money) #[]
查询是否位于列表
** in not in **
import random
num = random.randint(1,10)
print(num)
if num in [1,2,3,4,5]:
print('win')
else:
print('loser')
import random
num = random.randint(1,10)
print(num)
if num not in [1,2,3,4,5]:
print('win')
else:
print('loser')
列表查询
** index count len() **
#index 用来查看列表中指定一个元素的下标 列表.index(元素)
#count 用来统计列表中某个元素出现的次数 列表.count(元素)
#len() 用来统计列表的长度 len(列表)
heros=['钢铁侠','蜘蛛侠','蝙蝠侠','佐助','鸣人']
print(heros.index('佐助'))#3
print(heros.count('鸣人'))#鸣人出现的次数
print(len(heros))#查看heros列表中的元素长度
导出列表的元素
用循环
killer = ['比尔','韩信','赵云','荆轲','兰陵王','阿珂']
start = 0#这里指下标
while start<len(killer):
print(killer[start],end=';')
start+=1
#for 变量 in 后便一定是可迭代对象
#字符串 range 列表 字典 元组 集合
for x in killer:
print(x,end=';')
交换两个变量得值
#交换两个变量得值
num1=50
num2=100
print(num1,num2)
#拆包
num1,num2=num2,num1
print(num1,num2)
#引进第三个变量
num3=num1
num1=num2
num2=num3
print(num1,num2)
#如果两个变量都是数值
num1=num1+num2#150
num2=num1-num2#50
num1=num1-num2#100
print(num1,num2)
#异或运算 二进制十进制转换
num1=num1^num2
print(num1)#86
num2=num1^num2
print(num2)#50
num1=num1^num2
print(num1)#100
print(num1,num2)
列表的排序和反转
**sort sorted reverse **
num=[12,3,9,21,2,8,33,15,1]
#sort()直接对原来的列表进行排序 原来的结果发生了变化
num.sort()
print(num)#[1, 2, 3, 8, 9, 12, 15, 21, 33]
num.sort(reverse=True) #降序
print(num)#[33, 21, 15, 12, 9, 8, 3, 2, 1]
#sorted不会改变原来的数据 将结果放到了一个新的列表中
res = sorted(num)
print(num)#原来结果没变 [12, 3, 9, 21, 2, 8, 33, 15, 1]
print(res)#存放的是排序后的结果 [1, 2, 3, 8, 9, 12, 15, 21, 33]
#不排序 只是掉了个个 原来列表发生了变化
num.reverse()
print(num) #[1, 15, 33, 8, 2, 21, 9, 3, 12]
列表切片查找
peoples=['张三','李四',12,'王五','赵六','张三']
print(peoples.index('张三'))#如果有两个张三 默认返回第一个
print(peoples.index('张三',1,4))#不在就报错
print(peoples.index('张三',0,4))#0
print(peoples.index('张三',0,4,-1))#不支持步长
print(peoples.index('张三',1,6))#5 包含1 不包含6 取到下标为5
列表的嵌套
num=[34,18,9,20,1,15,11,30,4,62,10]#一维数组
num1=[[34,18,9,20],[1,15],[11,30,4],[62,10]]#二维数组
print(num1[0][3])#20
num2=[[34,[18,9,20],1],[15,11,30],[4,62,10]]#三位数组
print(num2[0][1][1])#9
num3=[[34,[18,[9,20]],1],[15,11,30],[4,62,10]]#四位数组
print(num3[0][1][1][1])#20
print(num3[0][1][1][0])#9
#随机选取一个二维数组
import random
nums=[34,18,9,20,1,15,11,30,4,62,10]
office = [[],[],[]]#把上面的人随机放到 不同的教室中
x = 0#下标
for name in nums:
index=random.randint(0,2) #0-2随机取其中一个数字
office[index].append(name)#把name随机放到office
# print(office)
for y in office:
print('办公室%d人数为%d:'%(x,len(y)))
x+=1
for z in y:
print('有:%s'%z,end=' ')
print('\n')
print('='*50)
z=0
import random
nums=['路飞','甚平','索隆','山治','乌索普','娜美','罗宾','乔巴','布鲁克','弗兰奇']
office=[[],[],[]]#0 1 2
x=0
for name in nums:
index=random.randint(0,2)
office[index].append(name)#随机选取二元列表 添加进去
print(office)
for y in office:
print('第%d间房子有%d个人'%(x,len(y)))
x += 1
for z in y:
print(z,end=' ')
print('\n')
[['路飞', '索隆'], ['甚平', '山治', '布鲁克', '弗兰奇'], ['乌索普', '娜美', '罗宾', '乔巴']]
第0间房子有2个人
路飞 索隆
第1间房子有4个人
甚平 山治 布鲁克 弗兰奇
第2间房子有4个人
乌索普 娜美 罗宾 乔巴
列表推导式(生成式)
#列表推导式和列表生成式 代表的一样
#Python 独有的
#列表生成式 性能更高
#Python解释器字节码指令中 有专门针对生成式的 指令 LIST_APPEND
#而for循环就是通过方法调用 LIST_APPEND 和 CALL_METHOD 为列表添加元素
# 调用方法本身就有损耗
# 所以列表生成式的性能最高
#创建一个1-9 数字组成的列表
#思路 1.循环遍历出来 1-9
#2.没一个出来以后 加入到一个列表中,最后打印列表
res=[]#创建一个空列表
for x in range(1,10):#包含1 不包含10
res.append(x)
print(res)
#列表生成式 写法
res1=[x for x in range(1,10)]
print(res1)
#元音字母 a o e i u
# hello world 除了空格和元音字母 然后放在列表中
res=[]
for x in 'hello world':
if x not in ' aeiou':
res.append(x)
print(res)
#列表生成式 写法
res2=[x for x in 'hello world' if x not in ' aeiou']
print(res2)
#创建 两个字符串 'meiyuan' '$%' 组成笛卡尔积
res=[]
for x in 'meiyuan':
for y in '$%':
res.append(x+y)
print(res)
#列表生成式 写法
res3=[x+y for x in 'meiyuan' for y in '$%']
print(res3) #['m$', 'm%', 'e$', 'e%', 'i$', 'i%', 'y$', 'y%', 'u$', 'u%', 'a$', 'a%', 'n$', 'n%']
列表的复制
num=[34,18,9,20,1,15,11,30,4,62,10]
#栈内存里边变量值 num
#堆内存里边数据 34,18,9,20,1,15,11,30,4,62,10
#######浅拷贝###############
# num1=num
# print(num)#[34, 18, 9, 20, 1, 15, 11, 30, 4, 62, 10]
# print(num1)#[34, 18, 9, 20, 1, 15, 11, 30, 4, 62, 10]
#
# num[5]=150
# print(num)#[34, 18, 9, 20, 1, 150, 11, 30, 4, 62, 10]
# print(num1)#[34, 18, 9, 20, 1, 150, 11, 30, 4, 62, 10]
#以上是浅拷贝 num1和nums 共同指向一个堆内存的地址 相互影响
#############深拷贝#######################
# num1 = num.copy()#复制内容 然后把结果放到了新的列表中 不跟原来的列表 指向一个内存地址
#互相不干扰
# print('拷贝之后的',num1)
# num1[5]=150
# print('还是原列表',num)
# print('复制以后进行了修改',num1)
#总结
num1=num #浅拷贝
num1=num.copy()#深拷贝
import copy #导入一个类
num=[34,18,9,20,1,15,11,30,4,62,10]
num2=copy.copy(num)
print('原列表',num)
print('复制之后的',num2)
num2[5]=150
print('修改之后的',num2)
print('还是原列表',num)
冒泡排序
# 原理 让一个数字跟右边相邻的数值进行比较运算
# 如果这个数字大于右边的数字 两个数字交换位置
num = [12, 3, 9, 21, 2, 8, 33, 15] #0-7
# num[0] num[1]
# num[1] num[2]
# ....
# num[n] num[n+1]
# num[len(num)-2] num[len(num)-1]
# 冒泡顺序
# 需要 轮
# 每一轮都会比较次数
# 综上 思路 嵌套循环
i = 0 #列表下标
k = 0 #每轮次数统计
while i < len(num)-1: # 外边是轮
i += 1
j = 0
while j < len(num) - 1: #里边是每轮走多少次
if num[j] > num[j + 1]:
num[j], num[j + 1] = num[j + 1], num[j]
k += 1
j += 1
print(num)
print(k)
[3, 9, 12, 2, 8, 21, 15, 33]
5
[3, 9, 2, 8, 12, 15, 21, 33]
8
[3, 2, 8, 9, 12, 15, 21, 33]
10
[2, 3, 8, 9, 12, 15, 21, 33]
11
[2, 3, 8, 9, 12, 15, 21, 33]
11
[2, 3, 8, 9, 12, 15, 21, 33]
11
[2, 3, 8, 9, 12, 15, 21, 33]
11