普通列表推导式
格式 : [单个元素的预期值或表达式 for i in 数据来源]
l1 = [i*2 for i in range(10)] print(l1) #等价于以下内容 l2=[] for i in range(10): l2.append(i*2) print(l2)
过滤的列表推导式
只有if时
格式:[预期表达式 for i in 数据来源 if 判断条件]
l1 = [i*2 for i in range(10) if i%2==0] print(l1)
#等价于以下内容
l2=[] for i in range(10): if i%2==0: l2.append(i*2) print(l2)
同时存在if else 时
格式: [预期表达式1 if 判断条件 else 预期表达式2 for i in数据来源]
l1 = [i*2 if i%2==0 else i for i in range(10)] print(l1) l2=[] for i in range(10): if i%2==0: l2.append(i*2) else: l2.append(i) print(l2)
多个for 循环推导
格式:[预期表达式 for i in数据来源1 for j in数据来源2]
第一个for循环为外层循环,第二个循环为内层循环
l1 = [f'{j}*{i}={i*j}' for i in range(1,10) for j in range(1,i+1)] print(l1) l2=[] for i in range(1,10): for j in range(1, i + 1): l2.append(f'{i}*{j}={i*j}') print(l2)
嵌套推导
当我们的列表是嵌套格式时,我们需要使用嵌套推导的方式。也就是在多个for循环中,使用括号括起来,以达到嵌套的效果
eg :
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] #将matrix变成以下内容 [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] matrix_new = [[i[j]for i in matrix] for j in range(4)] print(matrix_new) matrix_new1=[] for j in range(4): n = [] for i in matrix: n.append(i[j]) matrix_new1.append(n) print(matrix_new1)
attributes = ['name', 'dob', 'gender'] values = [['jason', '2000-01-01', 'male'], ['mike', '1999-01-01', 'male'], ['nancy', '2001-02-01', 'female'] ] # expected outout: [{'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'}, {'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}, {'name': 'nancy', 'dob': '2001-02-01', 'gender': 'female'}] # list = [dict(zip(attributes, value)) for value in values] list= [dict((k1,v1[k])for k,k1 in enumerate(attributes)) for v,v1 in enumerate(values)] l=[] for v,v1 in enumerate(values): dict={} for k, k1 in enumerate(attributes): dict.update({k1:v1[k]}) l.append(dict)