列表及列表操作
列表(list)也叫数组(array),是最常用的Python数据类型
1、定义列表
list=['sunny','杨阳',1,1.5,'哈哈']
- 用[]定义,元素间用逗号隔开
- 列表中的元素不需要是相同的数据类型
- 列表中的元素是有序的,每个元素都分配一个编号,或索引,第一个索引是0,第二个索引是1,依此类推
列表里面可以再套列表,一个里面套一个列表,叫二维数组;一个里面套一个列表,里面的列表再套一个列表,这个叫三维数组,套几层就是几维,定义格式如下:
1 num1=[1,2,3] #一维数组 2 num2=[1,2,3,[4,56]] #二维数组 3 nums=[1,2,3,4,['a','b','c','d','e',['一','二','三']],['四',0]] #三维数组
2、列表操作
2.1 查
使用下标索引访问列表中的值
1 list=['小黑','小白',1,1,2,1.5] 2 print(list[0]) #获取第一个元素 3 print(list[-1]) #获取最后一个元素 4 6 nums=[1,2,3,4,['a','b','c','d','e',['一','二','三']],['四',0]] #三维数组 9 print(nums[4][5][1]) #获取'二' 10 print(nums[5][1]) #获取'0' 11 print(nums[-1][-1]) #获取'0'
2.2 增
在列表中增加元素有两种方法:
- list.append(obj) 在元素末尾添加对象
- list.insert(index,obj) 在指定位置添加对象
1 list=['sunny','杨阳',1,1.5,'哈哈'] 2 list.append('lihui') #加在最后 3 list.insert(0,502797) #加在索引0处 4 print(list)
2.3 改
找到该元素,取出来重新赋值即可
1 list=['小黑','小白',1,1,2,1.5] 2 list[1]='呵呵' #将小白改成呵呵
2.4 删
四种方法:
- list.pop() 默认删除最后一个元素
list.pop(index) 删除指定下标的元素,传入的是下标,下标不存在的话会报错
- list.remove(obj) 删除指定元素,传入的是元素, 如果有相同的元素只会删除第一个,元素不存在时会报错
- del list[index] 删除指定下标的元素
- list.clear() 清空列表
1 list=['sunny','杨阳',1,1.5,'哈哈'] 2 list.pop() 3 list.pop(1) 4 list.remove(1.5) 5 print(list)
3、 列表内置方法
- list.count(obj) 统计某个元素在列表中出现的次数
- list.index(obj) 查找元素的下标, 所传元素不存在的话会报错
- list.reverse() 反转list
- list.sort() 排序,默认升序 ;list.sort(reverse=True) 如果指定了reverse=True就是降序
- list.extend(squ) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- len(list) 取list长度,即元素个数
- list(seq) 将元组转为列表
1 list=['小黑','小白',1,1,2,1.5] 2 print(list.count(1)) #查询某个元素在list里出现的次数 3 print('index方法:',list.index('小黑')) #查找元素的下标 所传元素不存在的话会报错 4 print('reverse方法:',list.reverse()) #reverse 反转list 5 print(list) 6 list.clear() #清空整个list 7 8 numbers=[4,7,5,0,3.5,6] 9 numbers.sort() #排序 升序 10 print(numbers) 11 numbers.sort(reverse=True) #如果指定了reverse=True就是降序 12 print(numbers) 13 14 numbers.extend(list) #将其他列表中的元素加到此list中 15 newlist=list+numbers #用+可以将两个list合并成一个新的list 16 print(newlist) 17 print(newlist*3) #将newlist复制3次
4、判断某个元素是否在list中,用in (也适用于字符串)
1 users=['xixi','haha'] 2 3 #校验用户名是否存在,不存在则添加 4 for i in range(5): 5 username=input('请输入用户名:') 6 #if users.count(username)>0: 7 if username in users: #判断一个元素是否再list中 in/not in count 8 print('用户已经被注册') 9 else: 10 print('用户未注册,可以注册') 11 users.append(username) 12 print(users)
5、循环遍历列表中的元素——for循环
1 #将passwd中的值都加上abc 2 passwd=['12345','6865','45632d'] 3 4 index=0 5 for p in passwd: 6 print(p) 7 passwd[index]=p+'abc' 8 index += 1 9 print(passwd) 10 11 12 for index,p in enumerate(passwd): #用enumeration枚举函数,它会取出下标和元素 不用再多定义一个index 13 print('enmerate每次循环的时候',index,p) 14 passwd[index]=p+'abc' 15 print(passwd)
运行结果:
12345
6865
45632d
['12345abc', '6865abc', '45632dabc']
enmerate每次循环的时候 0 12345abc
enmerate每次循环的时候 1 6865abc
enmerate每次循环的时候 2 45632dabc
['12345abcabc', '6865abcabc', '45632dabcabc']
6、切片
切片是一种取值方式,可获取多个值,适用于list、string。
list[start_index : end_index : step]
- 下标:
- 下标,从0开始,末尾是-1。
- start_index、end_index都写,切片下标取值顾头不顾尾(指包含start_index,不包含end_index)
- start_index不写,指从头开始取。
- end_index不写,指一直取到末尾。
- 步长step:隔x个取一次值
- 正数:从左往右取值
- 负数:从右往左取值
1 l=['a','b','c','d','e','j','k','l','m','n','o'] 2 # 0 1 2 3 4 5 6 7 8 9 10 3 print(l[0:4]) #顾头不顾尾 4 print(l[:4])#如果最前面没写的话,代表从0开始 5 print(l[4:]) #如果冒号后面没写的话,代表取到最后 6 7 print(l[::3]) #步长,也就是代表隔几个取一次 8 9 a=list(range(1,21)) 10 print(a[1::2]) #取偶数 11 print(a[::2]) #取奇数 12 print(a[::-2]) #如果最后面的步长是正数,从左往右取值;步长为负数,从右往左取值 13 print(a[::-1])
运行结果:
['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'd'] ['e', 'j', 'k', 'l', 'm', 'n', 'o'] ['a', 'd', 'k', 'n'] [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] [20, 18, 16, 14, 12, 10, 8, 6, 4, 2] [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
切片同样适用于字符串
1 s=input('请输入一个字符串:') 2 if len(s)<2: 3 print('字符串长度必须大于1') 4 elif s==s[::-1]: #s[::-1] 从右往左取字符串中的值 5 print('是回文') 6 else: 7 print('不是回文')
元组
- 用()定义
- 元组的值不能改变
- 只有count()和index()两种方法
1 sql_con = ('192.168.0.88','root','123456',3307,'my_db')#定义元组