Python列表数据类型详解
列表就是一组有序的数据组合,列表中的数据可以被修改
列表的定义
- 使用中括号进行定义[]
- 使用list函数进行定义
- 元素之间使用逗号进行分隔 [1,2,3,4]
- 列表中的元素可以是任意类型
列表的增删改查
# 列表的定义
varlist=[1,2,3,4,5]
varlist1=['a','b','c','d','e']
# 列表的拼接
print(varlist+varlist1) # [1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e']
print(varlist*2) # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
# 检测元素是否存在列表中
print('a' in varlist1) # True
# 列表索引操作
print(varlist[0])
print(varlist[-4])
# 通过下标修改元素,但不可以通过下标添加元素
varlist[0]='aa'
print(varlist) #['aa', 2, 3, 4, 5]
varlist[0]=1
# 向列表中添加元素
varlist.append(6)
print(varlist) # [1, 2, 3, 4, 5, 6]
#获取列表的长度 len()
print(len(varlist)) # 6
列表的切片操作
# 从索引的开始到最后进行截取
varlist=['python','java','php','c','c++','vb','shell']
print(varlist[2:]) # ['php', 'c', 'c++', 'vb', 'shell']
# 截取到指定的索引位置
print(varlist[:2]) # ['python', 'java']
# 截取指定索引范围内的数据
print(varlist[2:6]) # ['php', 'c', 'c++', 'vb']
# 索引区间加步进
print(varlist[0:-1:2]) # ['python', 'php', 'c++']
# 截取列表中所有元素[:] [::]
print(varlist[:])
print(varlist[::])
# 使用切片方法对列表进行数据更新和删除
# 从指定下标开始到结束,替换为相应数据,整型无法操作
varlist[0:4]='abc'
print(varlist) # ['a', 'b', 'c', 'c++', 'vb', 'shell']
# 根据步进值进行更新
varlist[2:6:2]=['A','B']
print(varlist) # ['a', 'b', 'A', 'c++', 'B', 'shell']
# 根据索引进行删除
del varlist[2:6]
print(varlist) # ['a', 'b']
列表的相关函数
# varlist.extend() 扩展列表
varlist=['python','java','php','c','c++','vb','shell','php']
varlist1=[1,2,3]
varlist.extend(['a,b,c'])
print(varlist) # ['python', 'java', 'php', 'c', 'c++', 'vb', 'shell', 'php', 'a,b,c']
varlist.extend(varlist1)
print(varlist) # ['python', 'java', 'php', 'c', 'c++', 'vb', 'shell', 'php', 'a,b,c', 1, 2, 3]
# varlist.clear() 清空列表内容
varlist1.clear()
print(varlist1)
# varlist.reverse() # 翻转列表
varlist.reverse()
print(varlist) # [3, 2, 1, 'a,b,c', 'php', 'shell', 'vb', 'c++', 'c', 'php', 'java', 'python']
# varlist.sort() 列表排序
varlist=[2,3,4,1,5,7,3,4,7,8,4,0,7,45,23]
varlist.sort(reverse=True) #对列表进行从大到小排序
print(varlist) # [45, 23, 8, 7, 7, 7, 5, 4, 4, 4, 3, 3, 2, 1, 0]
varlist.sort() # 默认对列表进行从小到大排序
print(varlist) # [0, 1, 2, 3, 3, 4, 4, 4, 5, 7, 7, 7, 8, 23, 45]
varlist.reverse() # 翻转列表
print(varlist) # [45, 23, 8, 7, 7, 7, 5, 4, 4, 4, 3, 3, 2, 1, 0]
#传出函数,根据函数计算规则进行排序
varlist.sort(key=abs)
print(varlist) # [0, 1, 2, 3, 3, 4, 4, 4, 5, 7, 7, 7, 8, 23, 45]
# varlist.copy() 复制一个列表
res=varlist.copy()
print(res)
深拷贝与浅拷贝
# 浅拷贝对于多维列表不能拷贝,只能引用
varlist=[[1,2,3],['a','b','c']]
newlist=varlist.copy()
print(newlist[0],id(newlist[0]))
print(varlist[0],id(varlist[0]))
# 深拷贝
import copy
varlist1=[1,2,3,['a','b','c']]
newlist1=copy.deepcopy(varlist1)
print('---------------')
print(newlist1[1],id(newlist[1]))
print(varlist1[1],id(varlist[1]))
列表推导式
列表推导式提供了简单的创建列表的方法
使用表达式的方式,对数据进行过滤并且把结果组成一个新列表
#计算0-9的平房列表
varlist=[]
for i in range(10):
res = i**2
varlist.append(res)
print(varlist)
#简化方法
varlist=list(map(lambda i:i**2,range(10)))
print(varlist)
#使用列表推导式
"""
1.变量=[变量或变量的处理结果 for i in 容器类型数据]
2.变量=[变量或变量的处理结果 for i in 容器类型数据 条件表达式]
"""
varlist=[i**2 for i in range(10)]
print(varlist)
#使用列表推导式完成字符串*2后的结果生成新的list
varstr='1234'
varlist=[int(i)*2 for i in varstr]
print(varlist)
# 使用位运算完成
varstr='1234'
varlist=[int(i)<<3 for i in varstr]
print(varlist)
#带有判断条件的列表推导式
#求0-9的所有偶数
varlist=[]
res=[i for i in range(10) if i%2==0 ]
print(res)
#多循环推导式
# [1,2,3] [3,1,4] 两个列表中的元素进行两两组合,且不可重复
x=[1,2,3]
y=[3,1,4]
varlist=[(i,j) for i in x for j in y if i!=j]
print(varlist)
#练习题
"""
转换:字典{'username':'admin','age':20,'phone':133}
换成:列表['username=admin','age=20','phone=133']
扩展:username=admin&age=20&phone=133
"""
vardict={'username':'admin','age':20,'phone':133}
varlist=[i+'='+str(vardict[i]) for i in vardict]
print(varlist)
str='&'.join(varlist)
print(str)
"""
转换:['AAA','BBb','CCcc']
换成:['aaa','bbb','ccc']
换成:['AAA', 'BBB', 'CCCC']
"""
varlist=['AAA','BBb','CCcc']
newlist=[i.upper() for i in varlist]
print(newlist)
newlist=[i.lower() for i in varlist]
print(newlist)
"""
x 是0-5的偶数,y是0-5的奇数,把x,y组成元组,放到列表中
"""
varlist=[(x,y) for x in range(6) for y in range(6) if x % 2==0 and y % 2 ==1]
print(varlist)