python进阶:推导式

推导式的作用:快速生成数据
运行过程:
1、创建一个空的结果容器,例如一个列表
2、从迭代器中逐个获取元素
3、将每个元素赋值给变量i
4、执行表达式,将得到的结果添加到结果容器中
5、重复步骤3、4,直到迭代器中的所有元素都被处理
6、返回最终的结果容器

一、列表推导式:

需求:快速生成一个[‘data0’,‘data1’,…,‘data10’]的列表

#常规语法写出来的效果
def normal():
	li = []
	for i in range(10):
		value = 'data{}'.format(i)
		li.append(value)
	print(li)

1、基础推导式:li = [ i for i in xxx]

def special():
	li = ['data{}'.format(i) for i in range(10)]
	print(li)

三元/目运算符:
语法:条件成立返回的值 if 条件 else 条件不成立返回的值
示例:name = 1 if 10 > 18 else 0

2、带条件的推导式:
需求:列表中仅包含奇数的部分

  • 形式一:[x for x in xx if 条件]
def special():
	li = ['data{}'.format(i) for i in range(10) if i%2!=0]
	print(li)

结果:

  • 形式二:[x1 if 条件 else x2 for x in xxx]

需求:生成列表[‘data0’,‘wheat1’,‘data2’,…,‘data8’,‘wheat9’]

def special():
	li = ['data{}'.format(i) if i%2==0 else 'wheat{}'.format(i) for i in range(10)]
	print(li)

结果:

二、字典推导式

需求:把列表li,转换成元素下标为键,值为元素值的字典格式的数据

def normal():
	li = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
	dict = {}
	for index, value in enumerate(li):
		dict[index] = value
	print(dict)

enumerate():是一个内置函数,用于将一个可迭代对象(如列表、元组或字符串)组合为一个索引序列,同时返回每个元素的索引和值。常用于需要同时访问元素值和索引的情况,尤其在处理循环时非常有用
enumerate(iterable, start=0)

  • iterable:要进行枚举的可迭代对象,如列表、元组、字符等
  • start(可选):制定索引的起始值,默认为0


1、基础推导式:{key:value for i in xxx}

def special():
	res = {f'key{i}':f'value{i}' for i in range(10)}
	print(res)

如果需要用到列表中的索引,使用该语句:{index:value for index,value in enumerate(列表表名)}

def special():
	li = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
	dict = {index:value for index,value in enumerate(li)}
	print(dict)

2、带条件的推导式
形式一:{index:value if 条件 else k2,v2 for index,value in xxx}
形式二:{index:value for index:value in xxx if 条件}

三、集合推导式

{ i for i in xxx}
{ i for i in xxx if 条件}
{ i if 条件 else v for i in xxx}

四、生成器表达式

因为元组是不可变的,所以无元组推导式,只有生成器表达式
生成器
{ i for i in xxx}
{ i for i in xxx if 条件}
{ i if 条件 else v for i in xxx}

练习题:

1、使用字典推导式将下面字符串格式的数据改成字典类型的数据

#普通写法1
test_str = 'num1=1234qwer;num2=2384hjdsa;num3=fndhusfsh222;num4=fhhuds3333;num5=ijfds444'
li = re.split(';',test_str)
dict = {}
for i in li :
    item = i.strip().split('=')
    k = item[0]
    v = item[1]
    dict[k] = v

#for循环内的部分还可以这么写:
key,value =  i.split('=')#key,value 这种一次给两个参数赋值的方法叫做多重赋值
dict[key] = value

#推导式写法
#单个for循环实现的方式
test_str = 'num1=1234qwer;num2=2384hjdsa;num3=fndhusfsh222;num4=fhhuds3333;num5=ijfds444'
dict = {i.stri11p().split('=')[0]: i.strip().split('=')[1] for i in test_str.split(';')}
print(dict)

#两个for循环实现的方式
def special():
	res1 = [i.strip().split('=') for i in test_str.split(';')]
	res = {value[0]:value[1] for value in res1 }
    #第二步的另一个方法,可以直接用多重赋值拆包
    res = {k:v for k,v in res1}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值