列表解析,又叫列表推导式(list comprehension),可以通过对list中每个元素应用一个函数,从而将一个list映射到另一个list。
列表解析比 for 更精简(用一行代码代替十几行代码),并且性能更快。
1)x代表一个值
## for循环实现列表解析
list_1=[]
for x in range(5):
list_1.append(x)
print(list_1)
## 列表解析
**[x for x in range(5)]** # 返回值是由for子句之后的表达式得到的元素组成的列表
## for循环实现列表解析
l1_list=[]
for x in l1:
a=x*2
l1_list.append(a)
print(l1_list)
## 列表解析
l1 = [1,2,3,4]
[ x*2 for x in l1]
2)x代表多个值
tinydict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
## for循环实现列表解析
list_l1=[]
for (key,value) in tinydict.items():
list_l1.append(key + ':' + str(value))
print(list_l1)
## 列表解析
[ k + ':' + str(v) for (k, v) in tinydict.items()]
3)两次循环
## for循环实现列表解析
l1_list=[]
l1 = [1,2,3,4]
l2 = [1,2,3,4]
for x in l1:
for y in l2:
a=x+y
l1_list.append(a)
print(l1_list)
## 列表解析
[x+y for x in l1 for y in l2]
vec = [[1,2,3], [4,5,6], [7,8,9]]
## for循环实现列表解析
list_l1=[]
for elem in vec:
for num in elem:
list_l1.append(num)
print(list_l1)
## 列表解析
[num for elem in vec for num in elem]
4)[fun(x) for x in list] 调用函数
def square(x): # 计算平方数
return x ** 2
[square(x) for x in range(1,10)]
## for循环嵌套if语句实现列表解析
list_l1=[]
for x in range(10):
if x%2 == 0:
list_l1.append(x)
print(list_l1)
## 列表解析
[ x for x in range(100) if x%2 ==0 ]
## for循环嵌套if语句实现列表解析
list_l1=[]
for x in [1,2,3]:
for y in [3,1,4]:
if x != y:
list_l1.append((x,y))
## 列表解析
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
mat = [ [1, 2, 3],[4, 5, 6], [7, 8, 9]]
## for循环生成矩阵
list_l2=[]
for i in (0,1,2):
list_l1=[]
for row in mat:
a=row[i]
list_l1.append(a)
list_l2.append(list_l1)
print(list_l2)
## 交换行列: 列表推导式生成矩阵
[[row[i] for row in mat] for i in (0,1,2)]