1、列表推导式、字典推导式

"""
1、列表推导式:
    作用:快速生成列表
    
    需求1:如何快速生成一个["data0","data1",...,"data99"]的列表
    语法:[y for x in xxx]
    实现:['data{}'.format(i) for i in range(100)]
    等价于:
        list1 = []
        for x in range(100):
            y = 'data{}'.format(x)
            list1.append(y)
    解释:每遍历一次,就往列表中添加一个y

# 列表推导式
# 通过for循环实现
list1 = []
for i in range(100):
    list1.append('data{}'.format(i))
print("用foe循环实现,list1的值为:", list1)

# 通过推导式实现
list2 = ['data{}'.format(i) for i in range(100)]
print("用列表推导式实现,list2的值为:", list2)


    常用语法
    需求2:如何快速生成一个["data1","data3",...,"data99"]的列表(全是奇数)(使用推导式+if进行过滤)
    语法:[y for x in xxx if 条件]
    实现:['data{}'.format(i) for i in range(100)if i % 2 == 1]
    解释:每遍历一次,就去判断if条件是否成立,若条件成立就往列表中添加一个y

# 推导式+if进行过滤
list3 = ['data{}'.format(i) for i in range(100) if i % 2 == 1]
print("推导式+if进行过滤,list3的值为:", list3)

# 等价于
list1 = []
for x in range(100):
if i % 2 == 1:
    y = 'data{}'.format(x)
    list1.append(y)
print(list1)


    需求3:生成一个["data0","max1","data2","max3",...,"data98","max99"]的列表(推导式+三目运算符)
    不同的条件,添加不同的值
    语法:[v1 if 条件 else v2 for x in xxx]
    实现:['max{}'.format(i) if i % 2 == 1 else 'data{}'.format(i) for i in range(100)]
    解释:每遍历一次,就去判断if条件是否成立,若条件成立就往列表中添加一个v1,若条件不成立就往列表中添加一个v2
    扩展:推导式里面同时使用if和三目运算符
    语法:[三目运算符 for i in xxx if 过滤条件]
    解释:每遍历一次,判断if条件是否成立,如果成立去执行三目运算并往列表中写值,如果不成立进入下次循环

    建议:
        从for循环开始写/看,方便理解和查看

# 推导式+三目运算符
list4 = ['max{}'.format(i) if i % 2 == 1 else 'data{}'.format(i) for i in range(100)]
print("推导式+三目运算符,list4的值为:", list4)

# 等价于
list1 = []
for x in range(100):
    if i % 2 == 1:
        v1 = 'data{}'.format(x)
        list1.append(v1)
    else:
        v2 = 'max{}'.format(x)
        list1.append(v2)
print(list1)

拓展


# 三目运算符
#   语法: v1 if 条件 else v2
#   res = v1 if 条件 else v2
#   等价于
#    if 条件:
#        res = v1
#    else:
#        res = v2
res = "ok" if 3 > 5 else "no ok"
print(res)


# 集合推导式,集合不能存在重复数据,所以可以用来去重,集合散列(无序)
#    {1,2,3,4,5}
#    语法:{i for i in xxx}
res = {i for i in range(10)}
print(res)

2、字典推导式

作用:快速生成字典

    需求1:有一个列表li,把它转换为一个元素下标为键,值为元素值的字典格式的数据
    li = ["a","b","c","d","e","f","g"]
    转换之后的样式:dic = {0:"a",1:"b",....}
    语法:{key:value for i in xx}
    实现:{index: value for index, value in enumerate(li)}
    等价于:
        dic = {}
        for index, value in enumerate(li):
            dic[index] = value
    解释:每遍历一次,就往字典中添加一个key:value键值对

# 需求1通过for循环实现
li = ["a", "b", "c", "d", "e", "f", "g"]
dic = {}
for index, value in enumerate(li):
    dic[index] = value
print("通过for循环实现需求1", dic)

# 需求1通过内置函数实现
r = enumerate(li)  # 获取li下标和索引
print("通过内置函数实现需求1", dict(r))  # 将li的下标和索引转化成list输出

# 需求1使用字典推导式实现
dic2 = {index: value for index, value in enumerate(li)}
print("通过字典推导式实现需求1", dic2)


 综合练习:使用字典推导式将下面字符串格式的数据,改造成字典类型的数据   cook_str="BIDUPSID=D0727533D7147B7;PSTM=1530348042;BAIDUID=B1005C9BC2EB28; sugstore=0;__cfduid=d0a13458f8ac2a;BD_UPN=12314353;ispeed_lsm=2;BDORZ=B490B5EBF6F3CD402"
  转换后的格式 res = {"BIDUPSID":"D0727533D7147B7","PSTM":"1530348042"....}
 

# 综合小练习
cook_str = "BIDUPSID=D0727533D7147B7;PSTM=1530348042; BAIDUID=B1005C9BC2EB28; \
    sugstore=0;__cfduid=d0a13458f8ac2a;BD_UPN=12314353;ispeed_lsm=2;BDORZ=B490B5EBF6F3CD402"
# for循环实现
dic = {}
cook_str1 = cook_str.split(';')
for item in cook_str1:
    k = item.split('=')[0].strip()  # strip()去空格的
    v = item.split('=')[1]
    dic[k] = v
print("综合小练习用for循环实现", dic)
# 推导式实现
res = {item.split('=')[0].strip(): item.split('=')[1] for item in cook_str.split(';')}
print("综合小练习用推导式实现", dic)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值