Python-list[]

list是什么

列表是一系列按照特定排序的元素组成。是一个有序集合
Python中的列表是由对其它对象的引用组成的连续数组。指向这个数组的指针及其长度被保存在一个列表头结构中

请添加图片描述

生成式(推导式)

效率很高 比循环语句快一倍 他是用c语言进行运行的 而正常语句是用Python脚本的虚拟机PVM以步进的方式运行
[express for target in iterable]
epress 就是最终会被填写进列表的部分 for in循环语句

# 第一种用法
s = [i*i for i in range(6)]#[0,1,4,9,16,25]
s = [ord(c) for c in 'abc']#[97,98,99] ord()将单个字符转换成编码
a = [[1,2,3],
	 [4,5,6],
	 [7,8,9]]
# 第二种用法
b = [row[1] for row in a]#[2,5,8]
# 第三种用法
c = [a[i][i] for i in range(len(a))]#[1,5,9]

index

lis =  ['ab','cd','ab',2]
print(lis.index('ab'))#0 从索引低往高找
print(lis.index('ab',1,3))#2
print(lis.index('ab',1,2))#报错

增加元素

切片(也可以添加元素)

切片结果是原列表的一个拷贝
默认步长1

lis =  ['ab','cd','ab',2,'q','w','e']
print(lis[0:3:2])#ab ab 
print(lis[3:0:-1])#2 ab cd 这个时候还是左闭右开
#如果step是正数lis[start:end:step] 左闭右开
#如果step是负数lis[end:start:step]
lst2 = [3,4,5,6,7]
lst3 = [3,4]
lst4 = [3,4,5,6]
lst[1:] = lst2#['ab', 3, 4, 5, 6, 7]
# 当要加入的数量和被插入部分的数量不一致时
lst[1:5] = lst3#['ab',   3, 4,   'w', 'e'] cd ab 2 q都被切了 换成了 3 4
lst[1,3] = lst3#['ab',   3, 4, 5, 6,   2, 'q', 'w', 'e']
# 相当于是将1-(3-1)这部分位置的元素换成lst3 类似于替换一部分 不管原来部分位置的数量和插入数据的数量

append() 在列表末尾添加一个元素

lst = [1,2,3]
lst2 = [4,5,6]
print('添加前:',lst,id(lst))#添加前: [1, 2, 3] 2158395576768
lst.append(4)
print('添加后:',lst,id(lst))#添加后: [1, 2, 3, 4] 2158395576768
lst.append(lst2)
print('添加后:','lst',id(lst))#添加后: [1, 2, 3, 4,[4, 5, 6]] 1847461597632 这样是将lst2作为一个元素添加到lst中
print(lst[4])#[4, 5, 6]
lst2.append(lst2)# [4,5,6,[...]]这是为什么

会发现添加前后lst的id保持不变 但是其实list在创建大小时是指数分配
当添加的元素大到一定程度时是会改变的

extend()在列表末尾添加至少一个元素

lst = [1,2,3]
lst2 = [4,5,6]
lst.extend(lst2)# [1, 2, 3, 4, 5, 6] 
lst2.extend(lst2)# [4,5,6,4,5,6]

insert()在列表中任意位置插入一个元素

insert(pos,val)

lst = [1,2,4]
lst.insert(2,3)
print(lst)#1 2 3 4

删除元素

pop()删除指定索引元素

lst[10,20,30,20]
lst.pop(2)# [10,20,20]
lst.pop()#[10,20,30] 默认删除最后的元素

remove()删除指定值元素

lst[10,20,30,20]
lst.remove(20)# [10,30,20] 有重复的删除最前面的

clear和del

del lst#直接删除列表
lst.clear()#清空列表

排序

sort

并不会创建一个新的list 是再原来的list上进行排序 id(lst)不变

lst.sort()# 默认升序排列
lst.sort(reverse = True)# 降序排列

count()查某个元素在列表中的数量

a = [1,1,1,2,3]
a.count(1)#3

二维矩阵

a = [[1,2,3],[4,5,6],[7,8,9]]
for i in a:
	for j in i:
		print(j,end = ',')
	print()

创建矩阵

A = [None ]*3
for i in range(3)
	a[i] = [None] * 2
#A = [[0]*3]*3这样是不行的 每一行都是一样的	
# 问题就出在 A = [[0] * 3]*3 这里的每一行都是一个id a[0],a[1],a[2]都是一个id
# A[2][1] = 4结果是[0,4,0][0,4,0][0,4,0]
# 正确做法应该是让每一个a[i]都被赋值

为什么a = [[0] * 3]*3和[0,0,0]*3结果不一样

a = [[0]*3]*3#[[0, 6, 0], [0, 6, 0], [0, 6, 0]]
b = [1,2,3]*3#[1, 2, 3, 1, 2, 3, 1, 2, 3]
a[1][1] = 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值