推导式——数据类型扩展

列表——推导式

常规列表

# 快速生成一个列表( 0 到 99 )
list1 = []
for i in range(100):
    list1.append("data{}".format(i))
print("list1的值为:", list1)

# 运行结果为:
list1的值为: ['data0', 'data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7', 'data8', 'data9', 'data10', 'data11', 'data12', 'data13', 'data14', 'data15', 'data16', 'data17', 'data18', 'data19', 'data20', 'data21', 'data22', 'data23', 'data24', 'data25', 'data26', 'data27', 'data28', 'data29', 'data30', 'data31', 'data32', 'data33', 'data34', 'data35', 'data36', 'data37', 'data38', 'data39', 'data40', 'data41', 'data42', 'data43', 'data44', 'data45', 'data46', 'data47', 'data48', 'data49', 'data50', 'data51', 'data52', 'data53', 'data54', 'data55', 'data56', 'data57', 'data58', 'data59', 'data60', 'data61', 'data62', 'data63', 'data64', 'data65', 'data66', 'data67', 'data68', 'data69', 'data70', 'data71', 'data72', 'data73', 'data74', 'data75', 'data76', 'data77', 'data78', 'data79', 'data80', 'data81', 'data82', 'data83', 'data84', 'data85', 'data86', 'data87', 'data88', 'data89', 'data90', 'data91', 'data92', 'data93', 'data94', 'data95', 'data96', 'data97', 'data98', 'data99']

=========================================================================================

列表推导式的使用

在这里插入图片描述

li2 = ["data{}".format(i) for i in range(100)]
print(li2)

# 运行结果为:
['data0', 'data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7', 'data8', 'data9', 'data10', 'data11', 'data12', 'data13', 'data14', 'data15', 'data16', 'data17', 'data18', 'data19', 'data20', 'data21', 'data22', 'data23', 'data24', 'data25', 'data26', 'data27', 'data28', 'data29', 'data30', 'data31', 'data32', 'data33', 'data34', 'data35', 'data36', 'data37', 'data38', 'data39', 'data40', 'data41', 'data42', 'data43', 'data44', 'data45', 'data46', 'data47', 'data48', 'data49', 'data50', 'data51', 'data52', 'data53', 'data54', 'data55', 'data56', 'data57', 'data58', 'data59', 'data60', 'data61', 'data62', 'data63', 'data64', 'data65', 'data66', 'data67', 'data68', 'data69', 'data70', 'data71', 'data72', 'data73', 'data74', 'data75', 'data76', 'data77', 'data78', 'data79', 'data80', 'data81', 'data82', 'data83', 'data84', 'data85', 'data86', 'data87', 'data88', 'data89', 'data90', 'data91', 'data92', 'data93', 'data94', 'data95', 'data96', 'data97', 'data98', 'data99']

=========================================================================================

常规列表结合 if 进行过滤

list3 = []
for i in range(100):
    if i % 2 == 0:
        list3.append("data{}".format(i))
print("list3的值为:", list3)

# 运行结果为:
list3的值为: ['data0', 'data2', 'data4', 'data6', 'data8', 'data10', 'data12', 'data14', 'data16', 'data18', 'data20', 'data22', 'data24', 'data26', 'data28', 'data30', 'data32', 'data34', 'data36', 'data38', 'data40', 'data42', 'data44', 'data46', 'data48', 'data50', 'data52', 'data54', 'data56', 'data58', 'data60', 'data62', 'data64', 'data66', 'data68', 'data70', 'data72', 'data74', 'data76', 'data78', 'data80', 'data82', 'data84', 'data86', 'data88', 'data90', 'data92', 'data94', 'data96', 'data98']

=========================================================================================

推导式结合 if 对数据进行过滤

在这里插入图片描述

li3 = ["data{}".format(i) for i in range(100) if i  ]
print(li3)

# 运行结果为:
['data0', 'data2', 'data4', 'data6', 'data8', 'data10', 'data12', 'data14', 'data16', 'data18', 'data20', 'data22', 'data24', 'data26', 'data28', 'data30', 'data32', 'data34', 'data36', 'data38', 'data40', 'data42', 'data44', 'data46', 'data48', 'data50', 'data52', 'data54', 'data56', 'data58', 'data60', 'data62', 'data64', 'data66', 'data68', 'data70', 'data72', 'data74', 'data76', 'data78', 'data80', 'data82', 'data84', 'data86', 'data88', 'data90', 'data92', 'data94', 'data96', 'data98']

=========================================================================================

生成一个[“data0”,“number1”,…“data98”,“number1”]的列表?

list4 = []
for i in range(100):
    if i % 2 == 0:
        list4.append("data{}".format(i))
    else:
        list4.append("number{}".format(i))
print("list4的值为:", list4)

# 运行结果为:
list4的值为: ['data0', 'number1', 'data2', 'number3', 'data4', 'number5', 'data6', 'number7', 'data8', 'number9', 'data10', 'number11', 'data12', 'number13', 'data14', 'number15', 'data16', 'number17', 'data18', 'number19', 'data20', 'number21', 'data22', 'number23', 'data24', 'number25', 'data26', 'number27', 'data28', 'number29', 'data30', 'number31', 'data32', 'number33', 'data34', 'number35', 'data36', 'number37', 'data38', 'number39', 'data40', 'number41', 'data42', 'number43', 'data44', 'number45', 'data46', 'number47', 'data48', 'number49', 'data50', 'number51', 'data52', 'number53', 'data54', 'number55', 'data56', 'number57', 'data58', 'number59', 'data60', 'number61', 'data62', 'number63', 'data64', 'number65', 'data66', 'number67', 'data68', 'number69', 'data70', 'number71', 'data72', 'number73', 'data74', 'number75', 'data76', 'number77', 'data78', 'number79', 'data80', 'number81', 'data82', 'number83', 'data84', 'number85', 'data86', 'number87', 'data88', 'number89', 'data90', 'number91', 'data92', 'number93', 'data94', 'number95', 'data96', 'number97', 'data98', 'number99']

=========================================================================================

推导式结合三目运算符(三元运算符)

li5 = ["data{}".format(i) if i % 2 == 0 else "number{}".format(i) for i in range(100)]
print(li5)

# 运行结果为:
['data0', 'number1', 'data2', 'number3', 'data4', 'number5', 'data6', 'number7', 'data8', 'number9', 'data10', 'number11', 'data12', 'number13', 'data14', 'number15', 'data16', 'number17', 'data18', 'number19', 'data20', 'number21', 'data22', 'number23', 'data24', 'number25', 'data26', 'number27', 'data28', 'number29', 'data30', 'number31', 'data32', 'number33', 'data34', 'number35', 'data36', 'number37', 'data38', 'number39', 'data40', 'number41', 'data42', 'number43', 'data44', 'number45', 'data46', 'number47', 'data48', 'number49', 'data50', 'number51', 'data52', 'number53', 'data54', 'number55', 'data56', 'number57', 'data58', 'number59', 'data60', 'number61', 'data62', 'number63', 'data64', 'number65', 'data66', 'number67', 'data68', 'number69', 'data70', 'number71', 'data72', 'number73', 'data74', 'number75', 'data76', 'number77', 'data78', 'number79', 'data80', 'number81', 'data82', 'number83', 'data84', 'number85', 'data86', 'number87', 'data88', 'number89', 'data90', 'number91', 'data92', 'number93', 'data94', 'number95', 'data96', 'number97', 'data98', 'number99']

=========================================================================================

多重for循环的推导式

# 举个例子:使用常规的双重for循环
li = []
for i in range(5):
    for j in range(i + 1):
        # li.append(f"{i}*{j}={i * j}")
        print(f"{i}*{j}={i * j}", end=" ")
    print()

# 运行结果为:
0*0=0 
1*0=0 1*1=1 
2*0=0 2*1=2 2*2=4 
3*0=0 3*1=3 3*2=6 3*3=9 
4*0=0 4*1=4 4*2=8 4*3=12 4*4=16 

=========================================================================================

li = []
for i in range(5):
    for j in range(i + 1):
        li.append(f"{i}*{j}={i * j}")
print(li)

# 运行结果为:
['0*0=0', '1*0=0', '1*1=1', '2*0=0', '2*1=2', '2*2=4', '3*0=0', '3*1=3', '3*2=6', '3*3=9', '4*0=0', '4*1=4', '4*2=8', '4*3=12', '4*4=16']

=========================================================================================

  • 多重for循环的推导式
    在这里插入图片描述
li2 = [f"{i}*{j}={i * j}" for i in range(5) for j in range(i + 1)]
print(li2)

# 运行结果为:
['0*0=0', '1*0=0', '1*1=1', '2*0=0', '2*1=2', '2*2=4', '3*0=0', '3*1=3', '3*2=6', '3*3=9', '4*0=0', '4*1=4', '4*2=8', '4*3=12', '4*4=16']

=========================================================================================

字典推导式

传统for循环的做法


li = ["a", "b", "c", "d", "e", "f", "g"]


# # 传统for循环的做法
dict1 = {}
for i, j in enumerate(li):
    dict1[i] = j
print(dict1)

# 运行结果为:
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g'}

=========================================================================================

字典推导式


li = ["a", "b", "c", "d", "e", "f", "g"]

# 字典推导式的语法
dic = {i: j for i, j in enumerate(li)}
print(dic)

# 运行结果为:
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g'}

=========================================================================================

集合推导式

li = ["a", "b", "c", "d", "e", "f", "g"]

# 集合推导式
s1 = {j for i, j in enumerate(li)}
print(s1)

# 运行结果为:
{'g', 'b', 'f', 'e', 'c', 'a', 'd'}

=========================================================================================

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

# 使用字典推导式将下面字符串格式的数据,改成字典类型的数据
cook_str = 'BIDUPSID=D0727533D7147B7;PSTM=1530348042; ' \
           'BAIDUID=B1005C9BC2EB28; sugstore=0;' \
           '__cfduid=d0a13458f8ac2a;BD_UPN=12314353;' \
           'ispeed_lsm=2;BDORZ=B490B5EBF6F3CD402'
# 使用for循环实现
dic = {}
for item in cook_str.split(";"):
    key = item.split("=")[0]
    value = item.split("=")[1]
    dic[key] = value
print(dic)

# 运行结果为:
{'BIDUPSID': 'D0727533D7147B7', 'PSTM': '1530348042', ' BAIDUID': 'B1005C9BC2EB28', ' sugstore': '0', '__cfduid': 'd0a13458f8ac2a', 'BD_UPN': '12314353', 'ispeed_lsm': '2', 'BDORZ': 'B490B5EBF6F3CD402'}

=========================================================================================

cook_str = 'BIDUPSID=D0727533D7147B7;PSTM=1530348042; ' \
           'BAIDUID=B1005C9BC2EB28; sugstore=0;' \
           '__cfduid=d0a13458f8ac2a;BD_UPN=12314353;' \
           'ispeed_lsm=2;BDORZ=B490B5EBF6F3CD402'

# 推导式实现
dic2 = {item.split("=")[0]: item.split("=")[1] for item in cook_str.split(";")}
print(dic2)

# 运行结果为:
{'BIDUPSID': 'D0727533D7147B7', 'PSTM': '1530348042', ' BAIDUID': 'B1005C9BC2EB28', ' sugstore': '0', '__cfduid': 'd0a13458f8ac2a', 'BD_UPN': '12314353', 'ispeed_lsm': '2', 'BDORZ': 'B490B5EBF6F3CD402'}

=========================================================================================

使用双重for实现字典推导式

# 使用字典推导式将下面字符串格式的数据,改成字典类型的数据
cook_str = 'BIDUPSID=D0727533D7147B7;PSTM=1530348042; ' \
           'BAIDUID=B1005C9BC2EB28; sugstore=0;' \
           '__cfduid=d0a13458f8ac2a;BD_UPN=12314353;' \
           'ispeed_lsm=2;BDORZ=B490B5EBF6F3CD402'
           
# 使用双重for实现字典推导式
dic2 = {i[0]: i[1] for item in cook_str.split(";") for i in [item.split("=")]}
print(dic2)

# 运行结果为:
{'BIDUPSID': 'D0727533D7147B7', 'PSTM': '1530348042', ' BAIDUID': 'B1005C9BC2EB28', ' sugstore': '0', '__cfduid': 'd0a13458f8ac2a', 'BD_UPN': '12314353', 'ispeed_lsm': '2', 'BDORZ': 'B490B5EBF6F3CD402'}


附上几道练习题

1、通过列表推导式完成下面数据类型转换

  • 现在有以下数据,li1 = ["{‘a’:11,‘b’:2}","[11,22,33,44]"]
  • 需要转换为以下格式: li1 = [{‘a’:11,‘b’:2},[11,22,33,44]]

2、 Names=[‘python’,‘java’,‘php’,‘c’,‘c++’,‘django’,‘unittest’,‘pytest’,‘pymysql’],
请通过列表推导式,获取names中字符串长度大于4的元素

3、通过字典推导式,颠倒字典的键名和值: 将{‘py’: “python09”, ‘java’: “java09”} 转换为:
{‘python09’: “py”, ‘java09’: “java”}

4、将字典{‘x’: ‘A’, ‘y’: ‘B’, ‘z’: ‘C’ } 通过推导式转换为:[‘x=A’,‘y=B’,‘z=C’]

"""
1、通过列表推导式完成下面数据类型转换
现在有以下数据, li1 = ["{'a':11,'b':2}","[11,22,33,44]"] 
需要转换为以下格式: li1 = [{'a':11,'b':2},[11,22,33,44]] 
"""

li1 = ["{'a':11,'b':2}", "[11,22,33,44]"]
res1 = [eval(i) for i in li1]
print("第一题:", res1)

"""
2、 Names=['python','java','php','c','c++','django','unittest','pytest','pymysql'],
    请通过列表推导式,获取names中字符串长度大于4的元素
"""
Names = ['python', 'java', 'php', 'c', 'c++', 'django', 'unittest', 'pytest', 'pymysql']
res2 = [i for i in Names if len(i) > 4]
print("第二题:", res2)

"""
3、通过字典推导式,颠倒字典的键名和值:
将{'py': "python09", 'java': "java09"} 转换为: {'python09': "py", 'java09': "java"}
"""
dict3 = {'py': "python09", 'java': "java09"}
res3 = {v: k for k, v in dict3.items()}
print("第三题:", res3)

"""
4、将字典{'x': 'A', 'y': 'B', 'z': 'C' } 通过推导式转换为:['x=A','y=B','z=C']
"""
dict4 = {'x': 'A', 'y': 'B', 'z': 'C'}
res4 = [f"{k}={v}" for k, v in dict3.items()]
print("第四题:", res4)

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值