🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 切片 Python提供了切片(Slice)操作符 字典不支持切片 取前3个元素,用一行代码就可以完成切片: ~~~ >>> L[0:3] ['Michael', 'Sarah', 'Tracy'] ~~~ `L[0:3]`表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是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 甚至什么都不写,只写`[:]`就可以原样复制一个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' ~~~ 跳几个取 ~~~ str = ['hello', 'world', 'php', 'python', 'java', 'c/c++', 'shell'] # 第一个位置是离起始位置,第二个是离终止的位置 # 从2往右边找不到0 print(str[2:0]) print(str[2:-1]) # 第3个是他们之间跳几个,也就是步长 print(str[2:-1:2]) print(str[2:-1:1]) # 往回跳着走 print(str[-1:2:-1]) ~~~ 输出 ~~~ [] ['php', 'python', 'java', 'c/c++'] ['php', 'java'] ['php', 'python', 'java', 'c/c++'] ~~~ # 迭代 在Python中,迭代是通过`for ... in`来完成的 只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代: ~~~ >>> d = {'a': 1, 'b': 2, 'c': 3} >>> for key in d: ... print(key) ... a c b ~~~ 因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。 **默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用`for k, v in d.items()`** 由于字符串也是可迭代对象,因此,也可以作用于for循环 **如何判断一个对象是可迭代对象呢?** 方法是通过collections模块的Iterable类型判断: ~~~ >>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整数是否可迭代 False ~~~ 如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身: ~~~ >>> for i, value in enumerate(['A', 'B', 'C']): ... print(i, value) ... 0 A 1 B 2 C ~~~ 上面的for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码: ~~~ >>> for x, y in [(1, 1), (2, 4), (3, 9)]: ... print(x, y) ... 1 1 2 4 3 9 ~~~