一、介绍
当需要对一个列表里的所有元素都进行相同操作是,使用遍历的方式需要写多行代码,显得比较繁琐
而采用列表推导式可以一行命令完成
二、简单的使用示例
示例:现有一个列表 a = [1,2,3,4,5],需要将每个元素都加1并生成新的列表b
# ****一般方式 # 方法1 a = [1,2,3,4,5] b = [] length = len(a) for i in range(length): num = a[i]+1 b.append(num) print(b) # 方法2 a = [1,2,3,4,5] b = [] for i in a: num = i+1 b.append(num) print(b) # ****使用列表推导式 a = [1,2,3,4,5] b = [i+1 for i in a] print(b)
三、在推导式中加入条件判断
示例:现有一个列表 a = [1,2,3,4,5],需要将小于等于3的元素乘以3,大于3的元素乘以2,并生成新的列表b
a = [1,2,3,4,5]
b = [i*3 if i<=3 else i*2 for i in a]
print(b) # 输出[3, 6, 9, 8, 10]
四、多重for循环的列表推导式
记住一点就行了:逻辑是从第一个for开始,从左往右执行,再取第一个for左侧的表达式放到list里
示例:# 有客户信息如下,需拿到与A公司有股权投资关系的,成立年限10年以上的公司客户名称list
# 有客户信息如下,需拿到与A公司有股权投资关系的,成立年限10年以上的公司客户名称list
custs = [
{
'type':'person',
'info': {
'name':'张三',
'age':'28',
'relationCompanys':[
{'name':'A公司','relationType':'股权投资'}
]
},
},
{
'type': 'company',
'info': {
'name':'xx公司',
'age':'7',
'relationCompanys':[
{'name':'A公司','relationType':'股权投资'},
{'name':'B公司','relationType':'合同纠纷'}
]
}
},
{
'type': 'company',
'info': {
'name':'yy公司',
'age':'10',
'relationCompanys':[
{'name':'A公司','relationType':'股权投资'},
{'name':'B公司','relationType':'合同纠纷'},
{'name':'C公司','relationType':'股权投资'}
]
}
}
]
# 不使用列表推导式
infoList = []
for cust in custs:
if cust.get('type') == 'company':
custNm = cust.get('info').get('name')
age = cust.get('info').get('age')
if int(age) >= 10:
relationCompanys = cust.get('info').get('relationCompanys')
for relationCompany in relationCompanys:
companyNm = relationCompany.get('name')
relationType = relationCompany.get('relationType')
if companyNm == 'A公司' and relationType == '股权投资':
infoList.append(custNm)
print(infoList) # ['yy公司']
# 使用列表推导式
infoList = [cust.get('info').get('name')
for cust in custs
if cust.get('type') == 'company' and int(cust.get('info').get('age')) >=10
for relationCompany in cust.get('info').get('relationCompanys')
if relationCompany.get('name') == 'A公司' and relationCompany.get('relationType')=='股权投资'
]
print(infoList) # ['yy公司']
五、扩展
除了列表推导式外,还有元组推导式、字典推导式
元组推导式:tuple_name = (代码段)
字典推导式:dict_name = {代码段}