迭代处理
常用的迭代处理内置函数:
| 函数 | 说明 | 示例 |
|---|---|---|
range(start, stop[, step]) | 生成整数序列(不包含 stop) | list(range(1, 5)) → [1, 2, 3, 4] |
enumerate(iterable[, start]) | 同时返回「下标 + 元素」 | enumerate(['a', 'b'], 1) |
zip(*iterables) | 并行打包多个序列 | zip([1, 2], ['a', 'b']) |
map(func, iterable) | 对每个元素应用函数 | list(map(str, [1, 2])) → ['1', '2'] |
filter(func, iterable) | 过滤出使函数为真的元素 | list(filter(None, [0, 1, 2])) → [1, 2] |
sorted(iterable[, key, reverse]) | 排序并返回新列表 | sorted([3, 1, 2]) → [1, 2, 3] |
reversed(seq) | 反转序列 | list(reversed([1, 2])) → [2, 1] |
iter(obj) | 获取迭代器 | it = iter([1, 2]) |
next(it[, default]) | 取迭代器的下一个值 | next(it, '没了') |
示例
# range:生成整数序列
print(list(range(1, 5))) # [1, 2, 3, 4]
print(list(range(10, 0, -2))) # [10, 8, 6, 4, 2]
# enumerate:同时获取下标和元素
for i, fruit in enumerate(['apple', 'banana'], start=1):
print(i, fruit) # 1 apple / 2 banana
# zip:并行遍历多个序列
for num, name in zip([1, 2], ['one', 'two']):
print(num, name) # 1 one / 2 two
# map / filter:映射与过滤
print(list(map(str, [1, 2, 3]))) # ['1', '2', '3']
print(list(filter(lambda x: x > 1, [1, 2, 3]))) # [2, 3]
# sorted:排序,不修改原序列
print(sorted([3, 1, 2])) # [1, 2, 3]
print(sorted(['bob', 'Alice'], key=str.lower)) # ['Alice', 'bob']
print(list(reversed([1, 2, 3]))) # [3, 2, 1]
# iter / next:手动驱动迭代器
it = iter([1, 2])
print(next(it), next(it)) # 1 2
print(next(it, '没了')) # 没了,耗尽后返回默认值