1 切片
对于取指定索引范围的数,用循环麻烦,Python提供了切片(Slice)操作来简化操作。
# 定义一个List
>>> arr=['zhangsan','lisi','wanger']
>>> arr
['zhangsan', 'lisi', 'wanger']
# 访问arr前两个元素
>>> arr[0:2]
['zhangsan', 'lisi']
# 0可以省略
>>> arr[:2]
['zhangsan', 'lisi']
# 获取最后一个元素
>>> arr[-1:]
['wanger']
# 获取倒数两个元素
>>> arr[-2:]
['lisi', 'wanger']
# 创建一个List
>>> ll=list(range(50))
>>> ll
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
# [0,12)范围内,每两个取一个数
>>> ll[:12:2]
[0, 2, 4, 6, 8, 10]
# 所有数中,每6个取一个数
>>> ll[::6]
[0, 6, 12, 18, 24, 30, 36, 42, 48]
tuple和字符串也可以使用切片操作。
2 迭代
如果给定一个list或tuple,可以通过for循环来遍历,这种遍历称为迭代(Iteration)。
# 创建一个dict
>>> grade_map={'lisi':99,'zhangsan':94,'wanger':100}
>>> grade_map
{'lisi': 99, 'zhangsan': 94, 'wanger': 100}
# 迭代操作,迭代 key
>>> for key in grade_map:
... print(key)
...
lisi
zhangsan
wanger
# 迭代操作,迭代 value
>>> for value in grade_map.values():
... print(value)
...
99
94
100
# 迭代 key&value
>>> for k,v in grade_map.items():
... print(k,':',v)
...
lisi : 99
zhangsan : 94
wanger : 100
1)如何判断一个对象是否是可迭代的?
# 使用 collections模块的Iterable类型判断:
>>> from collections import Iterable
>>> isinstance(grade_map,Iterable)
True
>>> isinstance('hello',Iterable)
True
>>> isinstance(123,Iterable)
False
2)对list实现类似Java那样的下标循环
# 使用内置的enumerate函数,把一个list变成索引-元素对
>>> for i,value in enumerate(['a','b','c']):
... print(i,value)
...
0 a
1 b
2 c
3)在for循环中,同时引用两个变量
>>> for x,y in [(1,1),(2,4),(2,7)]:
... print(x,y)
...
1 1
2 4
2 7
3 列表生成式
即 List Comprehensions,是Python内置的非常简单却强大的用来创建list的生成式。
# 生成list
>>> list(range(1,11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 列表生成式,生成[1,11)范围内偶数的平方的列表
>>> [x*x for x in range(1,11) if x%2 == 0]
[4, 16, 36, 64, 100]
# 使用两层循环
>>> [m + n for m in 'abc' for n in 'xyz']
['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
# 使用列表生成式输出grade_map的key-value对
>>> [k+'='+str(v) for k,v in grade_map.items()]
['lisi=99', 'zhangsan=94', 'wanger=100']