高级特性

切片
取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下:

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

取前N个元素,也就是索引为0-(N-1)的元素,可以用循环:

>>> r = []
>>> n = 3
>>> for i in range(n):
...     r.append(L[i])
...
>>> r
['Michael', 'Sarah', 'Tracy']

对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。
对应上面的问题,取前3个元素,用一行代码就可以完成切片:

>>> L[0:3]
['Michael', 'Sarah', 'Tracy']

L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引012,正好是3个元素。
如果第一个索引是0,还可以省略:

>>> L[:3]
['Michael', 'Sarah', 'Tracy']

也可以从索引1开始,取出2个元素出来:

>>> L[1:3]
['Sarah', 'Tracy']

类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:

>>> L[-2:]
['Bob', 'Jack']
>>> L[-2:-1]
['Bob']

记住倒数第一个元素的索引是-1
切片操作十分有用。我们先创建一个0-99的数列:

>>> L = list(range(100))
>>> L
[0, 1, 2, 3, ..., 99]

可以通过切片轻松取出某一段数列。比如前10个数:

>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

后10个数:

>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

前11-20个数:

>>> L[10:20]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

前10个数,每两个取一个:

>>> L[:10:2]
[0, 2, 4, 6, 8]

所有数,每5个取一个:

>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

甚至什么都不写,只写[:]就可以原样复制一个list

>>> L[:]
[0, 1, 2, 3, ..., 99]

tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)

字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'

在很多编程语言中,针对字符串提供了很多各种截取函数(例如,substring),其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

python基础6(来自廖雪峰的官方网站)相关推荐

  1. python基础8(来自廖雪峰的官方网站)

    生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大 ...

  2. python基础7 (来自廖雪峰的官方网站)

    高级特性 迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在Python中,迭代是通过for ... in来 ...

  3. python基础5(来自廖雪峰的官方网站)

    函数 定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的 ...

  4. python基础4(来自廖雪峰的官方网站)

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度.举个例子,假设要根据同学的名字查 ...

  5. python基础3(来自廖雪峰的官方网站)

    条件判断 完整形式如下: if <条件判断1>:<执行1> elif <条件判断2>:<执行2> elif <条件判断3>:<执行3& ...

  6. python基础2(来自廖雪峰的官方网站)

    list和tuple list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. >>> classmates = ['Mic ...

  7. python基础1(来自廖雪峰的官方网站)

    转义字符 为了简化,Python还允许用r''表示''内部的字符串默认不转义,eg. >>> print(r'\\\t\\') \\\t\\ 多行 为了简化,Python允许用''' ...

  8. python的本质,讨论 - 廖雪峰的官方网站

    关于 yield: yield一词的意思有 n.产出,产量:v.让步,提供. 所以当我们定义一个生成器函数时(带yield关键字的函数): def Iter(): for i in range(10) ...

  9. python正确方法,方法 - 廖雪峰的官方网站

    在一个对象中绑定函数,称为这个对象的方法. 在JavaScript中,对象的定义是这样的: var xiaoming = { name: '小明', birth: 1990 }; 但是,如果我们给xi ...

最新文章

  1. GitHub上最受欢迎的Android开源项目TOP20
  2. .net (object sender, EventArgs e) 学习总结
  3. 分享云及人工智能的一些学习资源和学习心得
  4. leetcode 222 Count Complete Tree Nodes
  5. KOFLive Beta Daily-Scrum 9
  6. Java中的注解是如何工作的?
  7. 【小马哥】Spring Cloud系列讲座
  8. 关于angularjs指令
  9. ASP.NET实现多域名多网站共享Session值
  10. Opencv 图像融合/泊松融合/seamlessClone
  11. 亿图图示11.0新版本全新上线 助力个人及企业降本增效
  12. 端口转发、映射、代理
  13. python数据挖掘实验报告_Python数据挖掘实践—决策树
  14. 五、隐函数微分法和逆函数导数 六、指数与对数函数导数、对数微分法 七、第一次考试复习
  15. excel高级筛选怎么用_Excel高级筛选系列教程(完整版)-第一期基础功能介绍
  16. vue网页打印针式打印机内容显示不全
  17. php swoole 教程,PHP7安装Swoole详细教程
  18. uc游览器 android系统,手机UC浏览器2019最新版
  19. Windows-电脑蓝屏问题
  20. 如何使用Mock进行单元测试

热门文章

  1. 基础笔记6(exception)
  2. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...
  3. 《梦断代码》读后感一
  4. UA PHYS515A 电磁理论IV 时变电磁场理论2 Helmholtz方程与含时的Green函数
  5. 首次安装Revit失败
  6. MFC CAsyncSocket类基本使用 - 1
  7. GIS可视性分析概述
  8. .net (object sender, EventArgs e) 学习总结
  9. 图解SQLite教程
  10. mysql下sql语句 update 字段=字段+字符串