列表、字典的遍历有很多技巧,如何写出简洁优雅的代码,可能需要了解如下知识:
列表遍历
字典遍历
列表迭代器
字典迭代器
列表生成式
字典生成式
列表生成器
列表遍历
直接遍历列表元素
list = ['zhangsan', 'lisi', 'wanger', 'mazi']
for value in list:
print value
zhangsan
lisi
wanger
mazi
利用索引遍历列表元素
list = ['zhangsan', 'lisi', 'wanger', 'mazi']
for i in range(len(list)):
print list[i]
zhangsan
lisi
wanger
mazi
利用枚举遍历列表的索引和对应的元素
list = ['zhangsan', 'lisi', 'wanger', 'mazi']
for i, value in enumerate(list):
print i, value
0 zhangsan
1 lisi
2 wanger
3 mazi
字典遍历
直接遍历字典元素,值为key
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
for key in dict:
print key, dict[key]
age 20
name zhangsan
sex man
遍历字典的key
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
for key in dict.keys():
print key, dict[key]
age 20
name zhangsan
sex man
遍历字典的value
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
for value in dict.values():
print value
20
zhangsan
man
利用枚举遍历字典的索引和key
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
for key, value in enumerate(dict):
print key, value
0 age
1 name
2 sex
利用items遍历字典的key和value
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
for key, value in dict.items():
print key, value
age 20
name zhangsan
sex man
列表迭代器
上面所说到的遍历方式非常占用内存,使用迭代器,大大减少内存的使用。
list = ['zhangsan', 'lisi', 'wanger', 'mazi']
for value in iter(list):
print value
zhangsan
lisi
wanger
mazi
字典迭代器
利用items的迭代器遍历字典
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
for key, value in dict.iteritems():
print key, value
age 20
name zhangsan
sex man
利用keys的迭代器遍历字典
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
for key in dict.iterkeys():
print key, dict[key]
age 20
name zhangsan
sex man
利用values的迭代器遍历字典
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
for value in dict.itervalues():
print value
20
zhangsan
man
列表生成式
列表生成式基本语法:[exp for iter_var in iterable]
带过滤功能:[exp for iter_var in iterable if_exp]
嵌套循环:[exp for iter_var1 in iterable1 for iter_var2 in iterable2 if_exp]
嵌套的列表生成式
list1 = [1, 2, 3]
list2 = [4, 5]
print [x * y for x in list1 for y in list2 if x > 1 and y < 5]
[8, 12]
带有函数的列表生成式
def handle(x, y):
if y == 2:
return [x, x]
if y == 3:
return [x, x, x]
list1 = [1, 2, 3]
list2 = [2, 3]
print [handle(x, y) for x in list1 for y in list2]
[[1, 1], [1, 1, 1], [2, 2], [2, 2, 2], [3, 3], [3, 3, 3]]
字典生成式
字典生成式与列表生成式,很相似,直接看一个例子。
dict = {'name': 'zhangsan', 'age': '20', 'sex': 'man'}
print {key: value for key, value in dict.items()}
{'age': '20', 'name': 'zhangsan', 'sex': 'man'}
列表生成器
列表生成器其实很简单,就是把[]变成(),可以使用next()、或者遍历的方式获取元素。为什么要说生成器,因为当列表长度很长时,太费内存,使用生成器则每次都是推算出来的当前元素,没有一次性的保存所有元素,和前面所说的迭代器是一个道理。
next()方式
a = (i for i in range(5))
print next(a)
print next(a)
print next(a)
print next(a)
print next(a)
0
1
2
3
4
遍历方式
b = (i for i in range(6,10,1))
for i in b:
print i
6
7
8
9