参考:迭代
如果给定一个list 或tuple,我们可以通过for 遍历这个list 或tuple,这种遍历称为迭代(iteration)。
python 的for循环抽象程度要高于其他语言的循环,因为它不仅可以用在list或tuple上,还可以用在str 与dict。
因为dict 的存储方式并不是有序的,和list 与tuple 不一样,因此迭代出的结果可能不同。
另外, 默认情况下,dict 迭代的是键,如果要迭代值,则需要专门标注。
d = {'a': 1, 'b': 2, 'c': 3}
for value in d.values():
print(value)
如果要同时迭代key与value,则需要用.items。
d = {'a': 1, 'b': 2, 'c': 3}
for k, v in d.items():
print(k, ":", v)
除此之外,我们还可以在for 循环中同时引用两个变量。
for x, y in [(1, 1), (2, 4), (3, 9)]:
print(x, y)
但需要注意的是,迭代指定的参数数目与其实际迭代对象的数目要相等,不然函数会报错。
for x,y,z in [(1, 1), (2, 4), (3, 9)]:
print(x, y, z)
ValueError: not enough values to unpack (expected 3, got 2)
for x, y in [(1, 1, 3), (2, 4), (3, 9)]:
print(x, y)
ValueError: too many values to unpack (expected 2)
构建迭代索引
我们除了可以迭代dict 时直接通过同时迭代key-value 的方式实现索引,也可以实现list 的下标循环。
enumerate 函数可以使一个可迭代对象变成索引-元素对,这样就可以在循环时同时迭代索引和元素本身。
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
0 A
1 B
2 C
如何判断对象是否可迭代
python 提供了collections模块的Iterable类型。
from collections import Iterable
print(isinstance('abc', Iterable)) # 判断‘abc’是否可迭代
print(isinstance(123, Iterable)) # 判断整数'123'是否可迭代
练习
# -*- coding: utf-8 -*-
# 请使用迭代查找一个list中最小和最大值,并返回一个tuple:
def findMinAndMax(L):
if L == []:
return (None, None) # 列表为空,返回指定元组
else:
x = L[0] # 初始化x
y = L[0] # 初始化y
for a in L: # 迭代列表L
if a > x: # 如果比现有的最大值大,则替换之
x = a
if a < y: # 如果比现有的最小值小,则替换之
y = a
return (y, x) # 返回(min, max)
网友评论