序列之列表详解
列表是python中常用的重要数据结构,它与字符串,元组都属于序列,支持序列相关操作;
本文主要内容如下:
1>列表定义方式与基本用法;
2>列表遍历;
2>字符串,元组与列表区别;
3>列表常用函数介绍。
列表在Python中表示方法:[val1, val2, val3],我们可以认为列表是一个大容器,里面可以放任意对象;
1)直接定义列表:
#数字列表,价格列表price = [90, 89, 70,100]#字符串列表,球队列表teams = ['恒大', '富力','申花', '国安']#二维列表:学生成绩列表:语文数学scores = [[90, 80],[70,60],[30,40]]
2)使用list函数生成列表:
list():创建空列表;
list(itemable):将可迭代对象生成列表;
使用方式如下:
#字符串转列表:print(list('helloworld'))#range对象转列表:print(list(range(10)))#enumerate对象print(list(enumerate('hello')))
3)修改列表元素值:
列表是一种可变数据结构,我们可以直接对其元素进行修改,例如:
#某用户关注手机类型如下phones = ['huawei', 'vivo', 'oppo', 'xiaomi']print(phones)#用户想把第一个修改荣耀,操作如下:phones[0] = '荣耀'print(phones)
输出结果如下:
['huawei', 'vivo', 'oppo', 'xiaomi']['荣耀', 'vivo', 'oppo', 'xiaomi']
2.遍历列表:
列表是一个可迭代对象,我们可以直接使用for循环对其遍历;
1)遍历一维列表:
phones = ['huawei', 'vivo', 'oppo', 'xiaomi']#for循环遍历for phone in phones: print(phone)
2)遍历二维列表:
如果是二维列表,我们希望遍历到每个元素,举个例子:
#NBA运动员,列表组成:球员列表,球员#我们希望遍历每个球员名称players = [['哈登', '库里','保罗'],['詹姆斯','杜兰特'],'霍华德']
我们可以遍历players列表,但是如何遍历每个子列表?
我们需要知道这个元素是不是列表,如何确认players中每个元素类型?
我们可以使用type或者isinstance函数,这两个函数说明如下:
看下具体操作:
s = 'math'#判断类型print('"{}"is str={}'.format(s, isinstance(s, str)))#查看类型print('type("{}")={}'.format(s, type(s)))a = 10print('type({})={}'.format(a, type(a)))#查看列表每个元素类型items = ['a',[1,2]]print('items=',items)for index, item in enumerate(items): print('type(items[{}])={}'.format(index, type(item)))
输出结果如下:
"math"is str=Truetype("math")=<class 'str'>type(10)=<class 'int'>items= ['a', [1, 2]]type(items[0])=<class 'str'>type(items[1])=<class 'list'>
这时我们想到什么?判断列中重元素是不是列表,如果是的话,继续遍历,否则打印出来,伪代码如下:
players = [['哈登', '库里','保罗'],['詹姆斯','杜兰特'],'霍华德']for item in players: if isinstance(item, list): 遍历子列表 else: print(item)
这个是我们的思路,剩下的就是代码实现,如下:
players = [['哈登', '库里','保罗'],['詹姆斯','杜兰特'],'霍华德']for item in players: if isinstance(item, list): for val in item: print(val) else: print(item)
再来思考下:如何遍历多维列表?根据上面实现,伪代码如下:
players = [['哈登', '库里','保罗'],['詹姆斯','杜兰特'],'霍华德']for item in players: if isinstance(item, list): for val in item: if isinstance(val, list): for x in val: if.... ... .... #对比起,我实在写不下去了 else: print(val) else: print(item)
这里可以考虑使用递归了,这个是我们后面学习内容,暂时就到二维列表了。
3.字符串,元组与列表区别:字符串与元组是不可变的数据结构,列表是可变的数据结构,什么是可变与不可变?我们可以对列表的某个元素值进行修改,我们来尝试修改字符串某值:
#对比列表与字符串list1 = [1,2,3]list1[0] = 10print(list1)#修改字符串值:s = 'test's[0] = 'T'print(s)
输出结果:
[10, 2, 3]---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-103-67d2a1e0bacd> in <module>() 5 #修改字符串值: 6 s = 'test'----> 7 s[0] = 'T' 8 print(s)TypeError: 'str' object does not support item assignment
运行出错,因为字符串不能被修改。这时候我们应该有个疑问:字符串的替换,大小写转换,为什么可以?来个例子我们看下:
#王者荣耀英雄名Heroes = ['苏烈','花木兰','马可波罗','白起','鬼谷子']print('{} addr={}'.format(Heroes, id(Heroes)))#更改第一个元素,然后对比列表地址Heroes[0] = '程咬金'print('{} addr={}'.format(Heroes, id(Heroes)))#定义字符串,然后大小写变化,在看地址s = 'CookBook'print('{} addr={}'.format(s, id(s)))s = s.title()print('{} addr={}'.format(s, id(s)))#结果:列表修改后地址不变,但是字符串地址变化,
字符串不是在原来基础修改,而是创建新的字符串,这个就是字符串元组与列表不同,大家在理解下。
列表常用方法 :1)序列常规操作:
Heroes = ['苏烈','花木兰','马可波罗','白起','鬼谷子']#取值:print(Heroes[0])#获取长度:print(len(Heroes))#切片操作:print(Heroes[1:])
2)数字列表相关操作:
对列表常用的方法如下:
这些方法使用如下:
#考试成绩得分scores = [90, 80, 95, 85]#获取最大值:print('最高分:', max(scores))#获取最小值:print('最低分:', min(scores))#获取总分allscore = sum(scores)print('总得分:', allscore)#平均分lens = len(scores)print('平均分:',allscore/lens)
到这里我们对列表常用方法就介绍完了,如果有编写问题,欢迎在评论区指正;
关于列表详细说明与使用,欢迎大家关注老猫专栏:https://blog.51cto.com/cloumn/detail/34。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。