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

[经验分享] 《Python基础教程》学习笔记 – Lesson02:列表和元组

[复制链接]

尚未签到

发表于 2015-4-20 11:04:48 | 显示全部楼层 |阅读模式
  在Python中最基本的数据结构是序列(sequence),第一个索引从0开始;
  
  在Python中,索引可以是负数,-1表示最后一个元素(倒数第一),-2表示倒数第二个元素;
  
  例如:
   DSC0000.png
  
  通用序列操作
  
  索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying),判断某个元素是否属于该序列成员、此外,还有计算序列长度,找出最大或最小元素的内建函数;
  
  索引
  
  从 0 开始递增,例:
   DSC0001.png
  如果索引是负数,则会从最右边开始,也就是从最后第一个元素开始计数,例:
   DSC0002.png
  序列到 -5 的时候就是最后一个元素了(从右向左),等同于序列 0 ;
  例:我们输入一个年份,只对最后 2 位感兴趣;
   DSC0003.png
  这里使用 : 表示取一定范围的元素,2:4 表示获取第 3 个和第 4 个元素;
  例:输入年月日,以月/日/年的英文+数字形式打印出日期;
  代码:
   DSC0004.png
   DSC0005.png
  运行结果:
   DSC0006.png
  
  分片
  
  可以使用分片操作( : )来访问一定范围内的元素,例:
   DSC0007.png
  注意:分片操作,第一索引元素是包括其自身在分片内的,而第二个索引元素是不包括其自身在内的,类似数学上的半开区间 [a, b);
  例:
   DSC0008.png
  在分片操作中如果要取得最后一个元素,可以把第二个索引的最大值加一(以这个例子来说就是numbers[9,10]);
  注意:如果分片中,左边的索引比右边出现的晚,结果就是一个空序,例:
   DSC0009.png
  另外要取得的分片部分包括结尾元素,那么只需空置最后一个索引:     
DSC00010.png
  这种方法同样适用于序列的开始以及整个序列:
   DSC00011.png
  例,输入一个URL(假设形式为http://www.somedomainname.com),提取域名;
   DSC00012.png
  
  步长
  在进行分片的时候,默认步长(step length)是1,通常是隐式设置的,这里可以手动设置;步长可以为负数,那么它将会从右到左提取元素;
  例:
   DSC00013.png
  个人分析,其实就是设步长为n,分片起始地索引为f,分片结束索引为l,目前正在执行的索引序列为t,那么它的执行过程就是:
  如果n为正值(伪代码):
  loop p1:
  t = f;
  if t < l then
    (print numbers[t]);
    t = t + n;
  else goto ...
  goto p1
  如果n为负值(伪代码):
  loop p1:
  t = f;
  if t > l  then
    (print numbers[t]);
    t = t + n;
  else goto ...
  goto p1
  
  序列的相加和乘法
  通过使用加号可以进行数列的连接操作:
  用过数字x乘以一个序列,会产生一个新序列,原来的序列将被重复x次;
  例:
   DSC00014.png
  如果要初始化一个空列表,可以使用Python内建值:None,例:
   DSC00015.png
  例:读取用户输入的一条信息,然后再屏幕上横向居中显示一个矩形,矩形中间显示刚才输入的信息;
  代码:
   DSC00016.png
  运行结果:
   DSC00017.png
  这里的screen_width = 102 是我的屏幕宽度,矩形的宽度比文字宽度大6,每边多3个位置,用来排版的;
  
  成员资格
  为了检查一个值是否在序列中,可以使用in运算符,这个运算符检测某个条件是否为真,然后返回相应的值,例:
   DSC00018.png
  最后是检查字符串,字符串最小的单位是字符,所以检测'$$'和空格都能查到(只要是连续的字符),但是查找'空格+!'是查不到的;
  再看一个例子:查看输入的用户名和PIN号码是否存在数据列表中;
  代码:
   DSC00019.png
  运行结果:
   DSC00020.png
  
  长度、最小值和最大值
  
  len函数返回序列中包含元素的数量;
  min和max函数分别返回序列中最大和最小的元素;
  例:
   DSC00021.png
  
  列表
  
  list函数
  因为字符串不能像列表一样被修改,所以有时候根据字符串创建列表会很有用:
   DSC00022.png
  
  基本的列表操作
  

  • 元素赋值
  使用索引标记来为某个特定的元素赋值,例:
   DSC00023.png
  

  • 删除元素
  使用del语句实现,例:
   DSC00024.png
  

  • 分片赋值
  例:
   DSC00025.png
   DSC00026.png
  numbers[1:1] = [2, 3, 4] 用来在索引1的位置插入几个数;
  
  列表方法
  

  • append
  用于在列表尾部追加新对象,例:
   DSC00027.png
  

  • count
  统计某个元素在列表中出现的次数,例:
   DSC00028.png
  

  • extend
  在列表末尾追加另一个序列中的多个值,例:
   DSC00029.png
  extend和字符串连接符+的区别是,+并不会修改原来的某个列表,而是创建一个副本存储新列表,另外也可以使用a[len(a):] = b的方式扩展列表a,不过可读性不如使用extend函数;
  

  • index
  用于找出某个值的第一个匹配索引位置,例:
   DSC00030.png
  如果未找到,触发一个异常;
  

  • insert
  将对象插入到列表中,例:
   DSC00031.png
  insert方法不会替换原有数据,它可以在指定位置添加对象,insert的方法也可以用分片赋值来实现,不过可读性不强;
  

  • pop
  该方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值,例:
   DSC00032.png
  pop()方法会修改原有列表,pop()方法会移除一个元素;
  使用pop可以实现常见的数据结构:栈,即:后进先出LIFO;在Python中没有所谓的入栈(push)方法,但是可以使用append方法来代替,例:
   DSC00033.png
  如果要实现先进后出(FIFO),可以使用insert(0,x)代替append方法,这里意思每次在序列最前端插入数据,每次pop()的数据就是最先存入的数据;或者继续使用append,但必须使用pop(0)来代替pop(),这里的表示,依然使用append在列表后面添加数据,但是pop(0)则是每次在列表最前端弹出数据,也就实现了最先存入的数据先被取出,例:
   DSC00034.png
  不过最好的解决方案是使用collection模块中的deque对象;
  

  • remove
  用于移除列表中某个值的第一个匹配项,例:
   DSC00035.png
  值得注意的是,remove()是一个没有返回值的方法;
  

  • reverse
  将列表中的元素反向存放,例:
   DSC00036.png
  reverse()方法并不返回值,如果要对一个列表反向迭代(并不修改原来列表),可以使用reversed()函数,它返回一个迭代器(iterator)对象,然后使用list()函数可把返回的对象转换成列表;
  

  • sort
  对列表进行排序,这个排序结果是直接保存在原列表的(2.3版以前不修改原序列,而是返回一个副本),例:
   DSC00037.png
  
  如果要保存原来的列表,可以这样:
   DSC00038.png
  不要执行类似如下的操作:
   DSC00039.png
  sort()方法在2.3版本后直接修改原有列表,而且它并不返回值;
  还要注意,不要使用y =  x,进行列表赋值,来保存原有列表,这是没用的,它实际会让他们指向同一个列表(地址),因为传递的是指针,例:
   DSC00040.png
  另外,可以使用sorted()函数获取已排序的列表副本,例:
   DSC00041.png
  它会返回一个已排序的列表,而不会去修改原有列表;
  

  • 高级排序
  如果希望元素按照特定方式排序,可以通过compare(x, y)的形式自定义比较函数,compare(x, y)函数会在x > y时返回1,x < y时返回-1,x = y时返回0,内建函数cmp(),提供了比较函数的默认实现方式,例:
   DSC00042.png
  关键字参数key,可以指定关键字进行排序,如果要按元素长度排序可以,可以指定key=len,例:
   DSC00043.png
  int型不存在长度对比,他都是根据系统平台来说的:16/32位;
  另一个关键字参数reverse是简单的布尔值,用来判断是否进行反向排序,例:
   DSC00044.png
  
  元组:不可变序列
  
  元组与列表一样,也是一种序列,唯一不同是元组不能修改(字符串也是如此),创建元组的语法很简单:如果用逗号分隔了一些值,那么就自动创建了元组,例:
   DSC00045.png
  要创建一个元素的元组,可以逗号后面什么都不加,空元组直接写()即可,另外注意长度为1的元组和非元组的区别;
  
  tuple函数
  
  把一个序列转换为元组,类似list()把序列转换为列表,如果参数就是元组,那么就会被原样返回,例:
   DSC00046.png
  元组也可以进行分片操作;
  

运维网声明 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-58739-1-1.html 上篇帖子: 用Python建立最简单的web服务器 下篇帖子: 《Python基础教程》学习笔记 – Lesson01:基础知识
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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