python序列和列表的区别_序列之列表详解

列表是python中常用的重要数据结构,它与字符串,元组都属于序列,支持序列相关操作;

本文主要内容如下:

1>列表定义方式与基本用法;

2>列表遍历;

2>字符串,元组与列表区别;

3>列表常用函数介绍。

1.列表定义方式:

列表在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函数,这两个函数说明如下:

函数

说明

type(object)

返回对象类型

isinstance(obj, class_or_tuple, /)

obj对象是否是指定类型或者指定其中一个

看下具体操作:

s = 'math'

#判断类型

print('"{}"is str={}'.format(s, isinstance(s, str)))

#查看类型

print('type("{}")={}'.format(s, type(s)))

a = 10

print('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=True

type("math")=

type(10)=

items= ['a', [1, 2]]

type(items[0])=

type(items[1])=

这时我们想到什么?判断列中重元素是不是列表,如果是的话,继续遍历,否则打印出来,伪代码如下:

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] = 10

print(list1)

#修改字符串值:

s = 'test'

s[0] = 'T'

print(s)

输出结果:

[10, 2, 3]

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in ()

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)数字列表相关操作:

对列表常用的方法如下:

方法

说明

max(iterable, *[, default=obj, key=func])

获取最大值

min(iterable, *[, default=obj, key=func])

获取最小值

sum(iterable, start=0, /)

对数字可迭代对象求和

这些方法使用如下:

#考试成绩得分

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。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值