Python推导式comprehension:列表推导式、集合推导式、字典推导式

一、Python中的推导式

推导式comprehension,可以从一个数据序列构建另一个新的数据序列的结构体。

  • 列表推导式
  • 集合推导式
  • 字典推导式
    在这里插入图片描述

二、列表推导式

作用:用一个表达式创建一个有规律的列表或控制一个有规律列表,可以简化代码

需求:创建一个0~1的列表
1、while循环实现

# 准备一个空列表
list = []

# 书写循环,依次追加数字到空列表中
i = 0
while i < 10:
    list.append(i)
    i += 1
print(list)

2、for循环实现

# 准备一个空列表
ls = []

# 书写循环,依次追加数字到空列表中
for i in range(10):
    list.append(i)
    i += 1
print(ls)

3、推导式实现

ls = [i for i in range(10)]  # 此处for与for循环相同, for 左侧写返回值
print(ls)

代码大大简化

三、带if的列表推导式

需求:0~10之间的偶数列表

ls = []
for i in range(10):
    if i % 2 == 0:
        ls.append(i)
print(ls)
# 一般的列表推导式
ls = [i for i in range(0, 10, 2)]
print(ls)

# 带if的列表推导式
ls2 = [i for i in range(10) if i % 2 == 0]
print(ls2)

输出:
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]

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

需求:创建如下列表:[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

ls = []
for i in range(1, 3):
    for j in range(3):
        ls.append((i, j))
print(ls)

ls2 = [(i, j) for i in range(1, 3) for j in range(3)]
print(ls2)

输出:
[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

三、集合推导式

集合有去重。

# 创建一个集合,数据为下述列表的平方
ls = [1, 1, 2, 3]

s = {
    
    i ** 2 for i in ls}
print(s)

输出;{
    
    1, 4, 9}

四、字典推导式

字典推导式作用:快速合并list为dict,或提取字典中的目标数据

# 创建一个字典:字典key是1~5数字,value是这个数字的平方
d = {
    
    i:i**2 for i in range(1, 5)}
print(d)

输出:
{
    
    1: 1, 2: 4, 3: 9, 4: 16}

情形1. 两个列表元素数量相同,统计任何一个list长度都可以
(list后期有可能变化,所以不用具体数目,用len)

# 将列表ls1,ls2合并为一个字典
ls1 = ["name", "age", "gender"]
ls2 = ["Tom", 20, "male"]

d2 = {
    
    ls1[i]:ls2[i] for i in range(len(ls1))}
d3 = {
    
    ls1[i]:ls2[i] for i in range(len(ls2))}
print(d2)

输出:
{
    
    'name': 'Tom', 'age': 20, 'gender': 'male'}
{
    
    'name': 'Tom', 'age': 20, 'gender': 'male'}

情形2. 两个列表元素数量不同,len统计元素多的,dict会报错
(list后期有可能变化,所以不用具体数目,用len)

# 将列表ls1,ls2合并为一个字典
ls1 = ["name", "age", "gender", "id"]
ls2 = ["Tom", 20, "male"]

d2 = {
    
    ls1[i]:ls2[i] for i in range(len(ls1))}
print(d2)
输出:IndexError: list index out of range

d3 = {
    
    ls1[i]:ls2[i] for i in range(len(ls2))}
print(d3)
输出:{
    
    'name': 'Tom', 'age': 20, 'gender': 'male'}

情形3. 快速提取目标数据

counts = {
    
    "a": 10, "b": 35, "c": 89, "d": 42}
# 需求:提取上述abcd中,分数大于40的数据

d = {
    
    k:v for k, v in counts.items() if v >= 40}
print(d)

输出:{
    
    'c': 89, 'd': 42}

五、小结

作用:简化代码
列表推导式作用:创建一个有规律的列表或控制一个有规律列表
集合推导式作用:创建一个有规律的集合或控制一个有规律集合,同时去重
字典推导式作用:快速合并list为dict,或提取字典中的目标数据

推导式写法:

# 列表推导式
[xx for xx in range()]
# 集合推导式
{
    
    xx for ... in...}
# 字典推导式
{
    
    xx1:xx2 for ... in...}

PS: source, bilibili

猜你喜欢

转载自blog.csdn.net/weixin_47008635/article/details/113837479