设为首页 收藏本站
查看: 852|回复: 0

[经验分享] Python序列(Sequence)

[复制链接]

尚未签到

发表于 2015-4-27 07:26:29 | 显示全部楼层 |阅读模式
  Sequence是Python的一种内置类型(built-in type),内置类型就是构建在Python Interpreter里面的类型,三种基本的Sequence Type是list(表),tuple(定值表,或翻译为元组),range(范围)。可以看作是Python Interpreter定义了这样三个class。
  字符串也是一种序列
  1,list,表
  Python有一系列的复合数据类型,其中最多才多艺的就是list
  class list([iterable])
  list用方括号括起来,并且用逗号分隔,成员的类型可以是不一样的,但一般是一种类型。
  1.1 list object的构建



>>> list = []
>>> list = [1,3]
>>> list
[1, 3]
  还可以这样构建



>>> list()   # empty list
[]
>>> [x for x in range(11)]    # [x for x in iterable]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list((3,5,6))   #  list(iterable)
[3, 5, 6]
  
  1.2,改变list元素值
  list和string不一样的是,string是不可变(immutable)的类型,list是可变的(mutable),可以对list整体或一部分进行改变



>>> list = [list, 5]
>>> list
[[1, 3], 5]
>>> list[1] = 6
>>> list
[[1, 3], 6]
  可以对list进行“切片”slice,得到一个子list,也可以对“切片”进行赋值,改变list
  范围引用的语法是[下限:上限:步长],默认步长是1,从前数下标从0开始,从后数下标从-1开始



>>> list = [1,2,3,4,5]
>>> list[2:4]
[3, 4]
>>> list[-3:]
[3, 4, 5]
  对切片进行赋值,改变list



>>> list
[1, 2, 3, 4, 5]
>>> list[3:] = [5,4]
>>> list
[1, 2, 3, 5, 4]
  从上面可一看到,对于改变list内容的操作,如赋值,都没有打印结果,也就是表达式返回的None常量。这是Python对可变数据结构(mutable Data Structure)的设计原则。
  
  2,tuple
  tuple是不可变的(immutable)
  class tuple([iterable])
  tuple的构建



seq = ()  或  seq = tuple()   #构建empty tuple
seq = (4,)  或  4,     #构建只有一个元素的tuple (4),逗号是必不可少的,不然会返回数字4
seq = (3,4,5) 或  seq = 3,4,5
seq =  tuple([3,4,5])  # 生成 (3,4,5)
  
  iterable可以是任何支持iteration的Sequence,Container。上面我们使用的参数是list [3,4,5],也可以就是用tuple  (3,4,5)
  对于tuple来说,重要的是逗号",",而不是括号,从上面我们可以看到括号没有歧义可以省去,但是有些地方必须要,比如:
  f(a,b,c)表示这个函数接受三个参数
  而f((a,b,c))表示这个函数接受一个参数,这个参数是一个三元的tuple。
  
  tuple是不可被赋值的,所以tuple常用来做不同type(异质)的元素的序列集合,而list就常用来做相同type(同质)的元素集合。
  
  3,range
  range也是一种类型(type),它是一个数字的序列(s sequence of numbers),而且是不可变的,通常用在for循环中
  class range(stop)
  class range(start, stop [, step])
  对于第一种构造方式,start默认值为0,step默认值为1
  当step为正时,一个range的元素值为r = start + i * step 且 r < stop; step为负时,r > stop



>>> range(6)
[0, 1, 2, 3, 4, 5]
>>> tuple(range(0,-10,-2))
(0, -2, -4, -6, -8)

  
  4.多重赋值(multiple assignment)
  多重赋值就是这样的赋值表达式。



1 t = a,b,c
2 a,b,c = t
  而多重赋值本质就是tuple packing (元组打包)和 Sequence unpacking(序列解包)。
  >>> t = a, b, c      #这就是tuple packing,按照tuple的构建的语法,我们知道这里t肯定是个tuple。
  >>>a, b, c  = t      #这就是Sequence unpacking,这里t只要是三元的Sequence就可以了,不一定是tuple,如果t不是三元的,会抛出一个ValueError异常。
  
  -----------------
  参考:
  http://www.iyunv.com/vamei/archive/2012/05/28/2522677.html    Vamei的博客
  http://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range      Python文档,内置类型Sequence
  http://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences     Python文档,tutorial

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60918-1-1.html 上篇帖子: python Django 学习笔记(四)—— 使用MySQL数据库 下篇帖子: python开发_count()
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表