【Python零基础】19天从零开始学Python——第十一天推导式

第十一天 推导式

文章目录

  • 一、推导式
  • 二、列表推导式
    • 2.1快速体验
      • while循环实现
      • for循环实现
      • 列表推导式实现(简单)
    • 2.2带if的列表推导式
      • 使用range()实现
      • for循环+if实现
      • 使用if实现(简单)
    • 2.3多个for循环实现列表推导式
      • for循环嵌套
      • 多个for实现列表推导式,相当于for循环嵌套
  • 三、字典推导式
    • 3-1创建字典
    • 3-2快速合并列表为字典
    • 3-3衍生len(列表的选择)
      • len统计数据一样的列表(任何列表都可)
      • len统计数据少的列表(显示已有键值对)
      • len统计数据多的列表(报错)
    • 3-4提取字典中的目标数据
  • 四、集合推导式
  • 五、总结
    • 5-1概念
    • 5-2语法

一、推导式

课程:推导式又叫生成式,只有列表、字典、集合有推导式
推导式的作用:简化代码

二、列表推导式

列表推导式:(又叫列表生成式)
通过用一个表达式创建一个有规律的列表或控制一个有规律的列表
作用:
化简代码,创建或控制有规律的列表

需求:创建一个0-10的列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
三种实现方法,进行比较
写法:
1、准备一个空列表
2、循环将有规律的数据写入列表

2.1快速体验

while循环实现

# while循环实现
list1 = []
i = 0
while i < 10:
    list1.append(i)
    i += 1
print(list1)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for循环实现

list1 = []
for i in range(10):
    list1.append(i)
    # list1.extend(i) # 不可以追加,会报错'int' object is not iterable
print(list1)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

列表推导式实现(简单)

写法: [i for i in range(10)]里面i相当于返回值

list2 = [i for i in range(10)]  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list2)

2.2带if的列表推导式

需求:创建0-10的偶数列表

使用range()实现

list = [i for i in range(0,10,2)]
print(list)  # [0, 2, 4, 6, 8]

for循环+if实现

list2 = []
for i in range(10):
    if i % 2 == 0:
        list2.append(i)
print(list2)  # [0, 2, 4, 6, 8]

使用if实现(简单)

list = [i for i in range(10) if i % 2 == 0]
print(list)  # [0, 2, 4, 6, 8]

注意: 想要追加数据用range(起始,终止,步长)–append(),想要for遍历数据,用列表名或元组名或者集合或者字典或者字符串

2.3多个for循环实现列表推导式

需求:输出[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
分析:
左侧数据,外层数据,从1-2,range(1,3);
右侧数据,内层数据,从0-2,range(3)

for循环嵌套

准备空列表,进行for嵌套循环

# for循环嵌套输出[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
list1 = []
for i in range(1,3):
    for j in range(3):
        list1.append((i,j))
print(list1)

多个for实现列表推导式,相当于for循环嵌套

list2 = [(i,j) for i in range(1,3) for j in range(3)]  # 一般使用的是()
print(list2)

备注: list2 = [(i,j) for i in range(1,3) for j in range(3)],此(i,j)还可以写成[i,j] 、{i,j},但不推荐

三、字典推导式

字典推导式的作用:快速将两个列表合并成一个字典

3-1创建字典

1、创建字典,key是1-4数字,值是其平方

dict1 = {i:i**2 for i in range(1,5)}
print(dict1)  # {1: 1, 2: 4, 3: 9, 4: 16}

3-2快速合并列表为字典

list1 = [‘name’,‘age’]
list2 =[‘Tim’,25,‘man’]
合并成’name’: ‘Tim’, ‘age’: 25, ‘gender’: ‘man’}

list1 = ['name','age']
list2 =['Tim',25,'man']
dict1 = {list1[i]:list2[i] for i in range(len(list1))}
print(dict1)  # {'name': 'Tim', 'age': 25, 'gender': 'man'}

3-3衍生len(列表的选择)

len统计数据一样的列表(任何列表都可)

# len统计数据一样的列表
list1 = ['name','age']
list2 =['Tim',25,'man']
dict1 = {list1[i]:list2[i] for i in range(len(list1))}
# dict1 = {list1[i]:list2[i] for i in range(len(list2))}
print(dict1)  # {'name': 'Tim', 'age': 25}

len统计数据少的列表(显示已有键值对)

# 2-2len(序列的长度),若是填写的长度比另一个短,那么显示能出现的键值对
list1 = ['name','age']
list2 =['Tim',25,'man']
dict1 = {list1[i]:list2[i] for i in range(len(list1))}
print(dict1)  # {'name': 'Tim', 'age': 25}

len统计数据多的列表(报错)

# 2-2len(序列的长度),若是填写的长度比另一个长,报错
list1 = ['name','age','gender','id']
list2 =['Tim',25,'man']
# dict1 = {list1[i]:list2[i] for i in range(len(list1))}
dict1 = {list1[i]:list2[i] for i in range(len(list2))}  # {'name': 'Tim', 'age': 25, 'gender': 'man'}
print(dict1)  # 超出列表长度的范围,报错list index out of range

总结:是否会报错,是否会输出能配对的键值对,取决于len(哪个列表)!!!

3-4提取字典中的目标数据

需求:可以在大量数据中获取到所需目标数据
题目:提取上述电脑数量销售>=200台
方法:for实现+if条件
1、获取所有数据(所有键值对),返回迭代器,
2、迭代器每个键值对内部都是一个元组(key、value)
3、两个临时变量拆包去接收,
4、再加入条件判断,
5、返回值是字典,以键值对形式
for实现+if条件

counts = {'MBP':268,'HP':125,'DELL':201,'Lenovo':199,'acer':99}
dict1 = {key:value for key,value in counts.items() if value>=100}
dict2 = {key:value for key,value in counts.items() if value>=200}
print(dict1)  # {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199}
print(dict2)  # {'MBP': 268, 'DELL': 201}

for循环后,要返回迭代器的值key,value,写在前面

四、集合推导式

集合推导式:化简,集合有去重功能

需求:创建一个集合,数据为下方列表的2次方

list1=[1,1,2]
set1={i**2 for i in list1}
print(set1)  # {1, 4}

五、总结

5-1概念

1、推导式的作用:化简复杂循环代码,返回列表、字典、集合
2、返回值,字典的返回值是键值对;集合有去重的功能
3、创建有规律的列表、或控制有规律的列表
4、快速合并列表为字典、提取字典的目标数据

5-2语法

列表推导式
[XX for i in range()]
字典推导式
1、快速合并列表为字典
{list1[i]:list2[i] for i in range(len(list1/2))}
2、提取字典中的目标数据:
{key:value for key,value in count.item() if 条件}
集合推导式
{XX for i in 列表}

你可能感兴趣的:(python,python,列表,集合,字典)