Python基础汇总之【推导式】

Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体
Python 支持各种数据结构的推导式:列表(list)推导式、字典(dict)推导式、集合(set)推导式、元组(tuple)推导式

  • 列表(list)推导式
    格式:[表达式 for 变量 in 列表]
    [out_exp_res for out_exp in input_list]
    或者
    [表达式 for 变量 in 列表 if 条件]
    [out_exp_res for out_exp in input_list if condition]
    (1)out_exp_res:列表生成元素表达式,可以是有返回值的函数。
    (2)for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
    (3)if condition:条件语句,可以过滤列表中不符合条件的值

案例1:0~9之间的偶数生成新列表

#非推导式
d=[]
for i in range(10):
    if i%2==0:
        d.append(i)
print('输出d::',d)
#输出结果:
输出d:: [0, 2, 4, 6, 8]

#推导式
sum=0
for i in range(10):
    sum=sum+1
    r1 =[i for i in range(i) if i%2==0]
print('输出r1::',r1)
#输出结果:
输出r1:: [0, 2, 4, 6, 8]

案例2:城市首字母为"bsgc"转换为全部大写,否则首字母大写

city=['CaoXian','BeiJing','ShangHai','GuangZhou','ShengZen','JiNan','JuanCheng','TianJin','HangZhou','NANJING']
newcity=[c.capitalize()  if c[0]  not in  ('BCSG')   else c.upper() for c in city]
print(newcity)

#输出结果:
['CAOXIAN', 'BEIJING', 'SHANGHAI', 'GUANGZHOU', 'SHENGZEN', 'Jinan', 'Juancheng', 'Tianjin', 'Hangzhou', 'Nanjing']

  • 字典(dict)推导式
    格式: { key_expr: value_expr for value in collection }

    { key_expr: value_expr for value in collection if condition }
#案例1:键值对
listdemo = ['baidu','taobao', '163']
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
newdict = {key:'https://www.'+ key +'.com' for key in listdemo}
print(newdict)

#输出结果:
{'baidu': 'https://www.baidu.com', 'taobao': 'https://www.taobao.com', '163': 'https://www.163.com'}


#案例2:平方计算
newdict0={num+'的平方':int(num)**2 for num in  (input('请输入一个数:'))}
print(newdict0)

#输出结果:
请输入一个数:9
{'9的平方': 81}

  • 集合(set)推导式
    格式: { expression for item in Sequence }

    { expression for item in Sequence if conditional }
class Light:

    def  _avg(self,A):#第1组数据平均数
        global sum
        sum = 0
        for i in (A):
            sum = sum+i#求和
        av = round(sum/len(A))#求平均值
        return av

    def add(self,B,av,k):#第2组数据分别减去第1组数据的平均数求和,并用和乘以相关系数
        global sum1
        sum1 = 0
        c = []
        for j in (B):
            l =abs(j-av)#求绝对值
            sum1=sum1 +l
        c.append(sum1*k)
        return c

A=[21,17,14,16,15,13,22,22,16,17,14,13,27,11,20,12,14,15,8,11,16,19,22,15,11,22,15,16,15,14]
B=[14,11,15,21,12,9,17,6,17,19,11,22,18,20,19,11,20,10,21,16,10,18,19,16,16,18,14,16,13,18]
k=2
a={int(l) if 180<=int(l)<=200 else '超过区间值!!!' for l in (Light().add(B,Light()._avg(A),k)) }
print(a)

#输出结果
{198}

-元组(tuple)推导式
元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象
格式: (expression for item in Sequence )

(expression for item in Sequence if conditional )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值