3.1. 高级特性
3.1.1. 切片
# 生成一个list
In [13]: arr=list(range(1,10))
In [14]: arr
Out[14]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 获取第1个元素
In [15]: arr[0]
Out[15]: 1
# 获取最后一个元素
In [16]: arr[-1]
Out[16]: 9
# 获取最后2个元素
In [17]: arr[-2:]
Out[17]: [8, 9]
# 获取倒数第二个元素
In [18]: arr[-2:-1]
Out[18]: [8]
# 隔一个获取元素
In [19]: arr[::2]
Out[19]: [1, 3, 5, 7, 9]
# 获取偶数位
In [20]: arr[1::2]
Out[20]: [2, 4, 6, 8]
# 特定范围的
In [21]: arr[2:4]
Out[21]: [3, 4]
# 复制
In [22]: arr[:]
Out[22]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
3.1.2. 是否可以迭代判定
In [23]: from collections.abc import Iterable
In [24]: isinstance("abc",Iterable)
Out[24]: True
In [25]: isinstance("[1,2]",Iterable)
Out[25]: True
In [26]: isinstance(1,Iterable)
Out[26]: False
3.1.3. 常见类型的遍历方法
arr=[1,2,3]
for i in arr:
print(i)
for index,i in enumerate(arr):
print(index,i)
kw = {"name": "zhaojiedi","age":10}
for k,v in kw.items():
print(k,v)
for k in kw:
print(k,kw[k])
for v in kw.values():
print(v)
3.1.4. 列表生成式
In [33]: arr=list(range(1,10))
In [34]: arr
Out[34]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
In [35]: [x for x in range(1,10)]
Out[35]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
In [36]: [x for x in range(1,10) if x%2==0]
Out[36]: [2, 4, 6, 8]
In [37]: [x if x%2==0 else -x for x in range(1,10) ]
Out[37]: [-1, 2, -3, 4, -5, 6, -7, 8, -9]
In [38]: [x*2 for x in range(1,10) ]
Out[38]: [2, 4, 6, 8, 10, 12, 14, 16, 18]
In [39]: [m+n for m in "ABC" for n in "XYZ" ]
Out[39]: ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
3.1.5. 生成器
列表生成式数据都会在内存, 特定场景下不合适, 期望使用到的时候计算出值,就需要生成器。
# 列表的,直接产出值了
In [40]: [x for x in range(1,10)]
Out[40]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 生成器的
In [41]: a = (x for x in range(1,10))
Out[41]: <generator object <genexpr> at 0x1062064d0>
In [43]: next(a)
Out[43]: 1
In [44]: next(a)
Out[44]: 2
In [45]: for i in a:
...: print(i)
3.1.6. 自己定义一个生成器函数
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def my_range(start,end):
if start >=end:
raise Exception("start >=end ")
for i in range(start,end):
yield i
print(my_range(1,10))
for i in my_range(1,10):
print(i)
3.1.7. 迭代器
凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。