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

[经验分享] Python基础教程 读书笔记(2)第二章 列表和元组

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-1 08:22:02 | 显示全部楼层 |阅读模式
  2.1序列概览
  列表和元组的主要区别在于,列表可以修改,元组则不能。也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适。使用后者的理由通常是技术性的,它与Python内部的运作方式有关。这也是内建函数可能返回元组的原因。一般来说,在几乎所有的情况下列表都可以替代元组。
  编写一个列表:



>>> edward=['Edward Gumby',42]
  构建如下的一个人员信息的列表也是可以的,这个列表就是你的数据库:



>>> john=['John Simith',50]
>>> database=[edward,john]
>>> database
[['Edward Gumby', 42], ['John Simith', 50]]
  2.2通用序列操作
  所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(sliceing) ,加(adding )、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。
  2.2.1索引
  序列中的所有元素都是有编号的—从0开始递增。这些元素可以通过编号分别访问:
  >>> greeting='Hello'
  >>> greeting[0]
  'H'
  字符串字面值(就此而言,其他序列字面量亦可)能够直接使用索引,而不需要一个变量引用他们。
  >>> 'Hello'[1]
  'e'
  如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。
  >>> fourth=raw_input('Year:')[3]
  Year: 2025
  >>> fourth
  '5'
  实例:
  #根据给定的年月日以数字形式打印出日期
  >>> months=[
  'January',
  'February',
  "March",
  'April',
  'May',
  'June',
  'July',
  'Augest',
  'September',
  'October',
  'November',
  'December'
  ]
  #以1一31的数字作为结尾的列表
  endings=['st','nd','rd']+17*['th']\
  +['st','nd','rd']+7*['th']\
  +['st']
  year=raw_input('Year:')
  month=raw_input('Month(1-12:')
  day=raw_input('Day(1-31):')
  month_number=int(month)
  day_number=int(day)
  #要将月份和天数减1,以获得正确的索引
  month_name=months[month_number-1]
  ordinal=day+endings[day_number-1]
  print month_name+''+ordinal+''+year
  Year: 2015
  Month(1-12:>? 5
  Day(1-31):>? 13
  May13th2015
  2.2.2分片
  与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。
  >>> tag='https://d396qusza40orc.cloudfront.net/statistics'
  >>> tag[23:37]
  'cloudfront.net'
  分片操作对于提取序列的一部分是很有用的。而编号在这里显得尤为重要。第1个索引是需要提取部分的第1个元素的编号,而最后的索引则是分片之后剩下部分的第1个元素的编号:
  >>> numbers=[1,2,3,4,5,6,7,8,9]
  >>> numbers[3:6]
  [4, 5, 6]
  简而言之,分片操作的实现需要提供两个索引作为边界,第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。
  1.优雅的捷径
  假设需要访问最后3个元素(根据先前的例子),那么当然可以进行显式的操作:
  如果分片所得部分包括序列结尾的元素,那么,只需置空最后一个索引即可:
  >>> numbers[-3:]
  [7, 8, 9]
  这种方法同样适用于序列开始的元素:
  >>>numbers[:3]
  [1,2,3]
  2.3列表
  2.3.1list函数
  >>> list('hello')
  ['h', 'e', 'l', 'l', 'o']
  2.3.2基本的列表操作
  1.改变列表:元素赋值
  >>> x=[1,1,1]
  >>> x[1]=2
  >>> x
  [1, 2, 1]
  2.删除元素
  >>> names=['alice','beth','cecil','dee-dee','earl']
  >>> del names[2]
  >>> names
  ['alice', 'beth', 'dee-dee', 'earl']
  3.分片赋值
  >>> name=list('Perl')
  >>> name
  ['P', 'e', 'r', 'l']
  >>> name[2:]=list('ar')
  >>> name
  ['P', 'e', 'a', 'r']
  可以使用与原序列不等长的序列将分片替换:
  >>> name=list('Perl')
  >>> name[1:]=list('ython')
  >>> name
  ['P', 'y', 't', 'h', 'o', 'n']
  可以在不需要替换任何原有元素的情况下插入新的元素
  >>> numbers=[1,5]
  >>> numbers[1:1]=[2,3,4]
  >>> numbers
  [1, 2, 3, 4, 5]
  2.3列表方法
  1.append
  >>> lst=[1,2,3]
  >>> lst.append(4)
  >>> lst
  [1, 2, 3, 4]
  2.count
  >>> ['to','be','or','not','to','be'].count('to')
  2
  >>> x=[[1,2],1,1,[2,1,[1,2]]]
  >>> x.count(1)
  2
  >>> x.count([1,2])
  1
  3.extend
  >>> a=[1,2,3]
  >>> b=[3,4,5]
  >>> a.extend(b)
  >>> a
  [1, 2, 3, 3, 4, 5]
  >>> a=a+b效果相同
  4.index
  >>> knights=['we','are','the','knights','who','say','ni']
  >>> knights.index('who')
  4
  >>> knights[4]
  'who'
  5.insect
  >>> numbers=[1,2,3,5,6,7]
  >>> numbers.insert(3,'four')
  >>> numbers
  [1, 2, 3, 'four', 5, 6, 7]
  6.pop
  移除列表中的一个元素,默认是最后一个
  >>> x=[1,2,3]
  >>> x.pop()
  3
  >>> x
  [1, 2]
  7.remove
  >>> x=['to','be','or','not','to','be']
  >>> x.remove('be')
  >>> x
  ['to', 'or', 'not', 'to', 'be']
  8.reverse
  >>> x=[1,2,3]
  >>> x.reverse()
  >>> x
  [3, 2, 1]
  9.sort
  >>> x=[4,5,3,1,7]
  >>> x.sort()
  >>> x
  [1, 3, 4, 5, 7]
  
  >>> x=[4,5,3,1,7]
  >>> y=x[:]
  >>> y.sort()
  >>> x
  [4, 5, 3, 1, 7]
  >>> y
  [1, 3, 4, 5, 7]
  >>> y=x.sort()
  >>> print y
  None
  应该是:
  >>> x=[4,5,3,1,7]
  >>> y=x[:]
  >>> y.sort()
  >>> x
  [4, 5, 3, 1, 7]
  >>> y
  [1, 3, 4, 5, 7]
  获取已排序的列表副本:
  >>> x=[4,5,3,1,7]
  >>> y=sorted(x)
  >>> x
  [4, 5, 3, 1, 7]
  >>> y
  [1, 3, 4, 5, 7]
  10.高级排序
  compare(x.y)函数会在x<y时返回负数,在x>y时返回正数,如果x=y则返回0
  >>> cmp(40,33)
  1
  >>> cmp(33,40)
  -1
  >>> numbers=[5,2,9,7]
  >>> numbers.sort(cmp)
  >>> numbers
  [2, 5, 7, 9]
  2.4元组:不可变序列
  如果你用逗号分隔了一些值,那么你就自动创建了元组。
  >>> 1,2,3
  (1, 2, 3)
  >>> ()#空元组
  ()
  2.4.1tuple函数
  tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转换
  
  为元组。
  >>> tuple([1,2,3])
  (1, 2, 3)
  >>> tuple('abc')
  ('a', 'b', 'c')
  2.4.2基本元祖操作
  大致和序列类似
  2.4.3元组的意义
  元组可以在映射(和集合的成员)中当作键使用—而列表则不行元组作为很多内建函数和方法的返回值存在,也就是说你必须对元组进行处理。只要不尝试修改元组,那么,“处理”元组在绝大多数情况下就是把它们当作列表来进行操作(除非需要使用一些元组没有的方法,例如index和count一般来说,列表可能更能满足对序列的所有需求。
  2.5小结
  cmp(x, y)比较两个值
  len(seq)返回序列的长度
  list(seq)把序列转换成列表
  max(args)返回序列或者参数集合中的最大值
  min(args)返回序列或者参数集合中的最小值
  reversed(seq)对序列进行反向迭代
  sorted(seq)返回已排序的包含seq所有元素的列表
  tuple(seq)把序列转换成元组

运维网声明 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-145593-1-1.html 上篇帖子: 配置python环境 下篇帖子: python中strip,lstrip,rstrip简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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