切片的目的是实现取一个list或tuple的部分元素

学习自廖雪峰,个人理解如下:

取列表L的前三个元素

>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

-----------------------------------------------------------
方法一:
笨办法: >>> [L[], L[], L[]]
['Michael', 'Sarah', 'Tracy']
之所以是笨办法是因为扩展一下,取前N个元素就没辙了。

------------------------------------------------------------
方法二:
取前N个元素,也就是索引为0-(N-)的元素,可以用循环: >>> r = []
>>> n =
>>> for i in range(n):
... r.append(L[i])
...
>>> r
['Michael', 'Sarah', 'Tracy']
对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。

循环也是不错的方式,不过下面Python提供现成的实现方式 -------------------------------------------------------------
对应上面的问题,取前3个元素,用一行代码就可以完成切片: >>> L[:]
['Michael', 'Sarah', 'Tracy']
L[:]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,,,正好是3个元素。 如果第一个索引是0,还可以省略: >>> L[:]
['Michael', 'Sarah', 'Tracy']
也可以从索引1开始,取出2个元素出来: >>> L[:]
['Sarah', 'Tracy']
类似的,既然Python支持L[-]取倒数第一个元素,那么它同样支持倒数切片,试试: >>> L[-:]
['Bob', 'Jack']
>>> L[-:-]
['Bob']
记住倒数第一个元素的索引是-。 切片操作十分有用。我们先创建一个0-99的数列: >>> L = list(range())
>>> L
[, , , , ..., ]
可以通过切片轻松取出某一段数列。比如前10个数: >>> L[:]
[, , , , , , , , , ]
后10个数: >>> L[-:]
[, , , , , , , , , ]
前11-20个数: >>> L[:]
[, , , , , , , , , ]
前10个数,每两个取一个: >>> L[::]
[, , , , ]
所有数,每5个取一个: >>> L[::]
[, , , , , , , , , , , , , , , , , , , ]
甚至什么都不写,只写[:]就可以原样复制一个list: >>> L[:]
[, , , , ..., ]
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple: >>> (, , , , , )[:]
(, , )
字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串: >>> 'ABCDEFG'[:]
'ABC'
>>> 'ABCDEFG'[::]
'ACEG'

最新文章

  1. 重装Ubuntu16.04及安装theano
  2. svn 忽略文件不管用
  3. 17、文案人员 - IT软件人员书籍系列文章
  4. svg学习(八)polyline
  5. Android——ProgressDialog 进度条对话框
  6. 在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置
  7. sencha architect/sencha touch , to prevent breakpoint lost when you debug
  8. GIT学习(一)-->Git产生的历史原因
  9. |,&,<<,>>运算符
  10. MIP开发教程(二) 使用MIP-CLI工具调试MIP网页
  11. day11.2lambda函数表达式 及其返回值注意事项
  12. 遍历删除查临时表相关session再操作表
  13. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-2设置SSH免密登录
  14. Newtonsoft.Json 时间格式化
  15. android ncnn
  16. js里用append()和appendChild有什么区别?
  17. ssl,proxy;部分http部分https;80,443,8080;nginx+tomcat;
  18. CentoOS6.6安装netcat
  19. HDU 1234:开门人和关门人
  20. samtools软件的使用

热门文章

  1. 删除github上面的项目
  2. App 性能相关
  3. Java多线程之三volatile与等待通知机制示例
  4. 【转载】LINUX 和 WINDOWS 内核的区别
  5. C# 锁系列目录
  6. Java——this关键字
  7. 自定义input文件上传样式
  8. [转]git commit之后,想撤销commit
  9. 深度解析XML的结构与类映射
  10. PHP中如何给日期加上一个月/天