列表、字典的遍历有很多技巧,如何写出简洁优雅的代码,可能需要了解如下知识:
- 列表遍历
- 字典遍历
- 列表迭代器
- 字典迭代器
- 列表生成式
- 字典生成式
- 列表生成器
列表遍历
-
直接
遍历列表元素
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
网友评论