python 推导式(列表推导式、元组推导式、字 典推导式和集合推导式)以及zip 函数及用法(带示例)

python 推导式(列表推导式、元组推导式、字 典推导式和集合推导式)以及zip 函数及用法(带示例)

一、推导式

概念

推导式(又称解析器),是 Python 独有的一种特性。使用推导式可以快速生成列表、元组、字典以及集合类型的数据,因此推导式又可细分为列表推导式、元组推导式、字典推导式以及集合推导式。

Python 列表推导式

列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。
列表推导式的语法格式如下:

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。

等价于:

for 迭代变量 in 可迭代对象
 表达式

示例:

#实现要求计算0~9每个元素得的平方值,然后放到列表里面

#方法一
a1 = [x**2 for x in range(10)] 
print("a1:",a1)

#等价于  
#方法二
a2 = []
for x in range(10):
    a2.append(x**2)
print("a2:",a2)



#可以在列表推导式中添加 if 条件语句
#方法一
a3 = [x**2 for x in range(10) if x%2==0] 
print("a3:",a3)

#等价于  
#方法二
a4 = []
for x in range(10):
    if(x%2==0):
        a4.append(x**2)
print("a4:",a4)

运行结果是一致的。
在这里插入图片描述
同时推导式也支持多个循环(循环嵌套)

#实现嵌套循环
b1 = [(x,y) for x in range(2) for y in range(3)]
print("b1:",b1)

b2 = []
for x in range(2):
    for y in range(3):
        b2.append((x,y))
print("b2:",b2)

在这里插入图片描述

Python 元组推导式

元组推导式的语法格式如下:

(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )

其中,用 [] 括起来的部分,可以使用,也可以省略。

a = (x for x in range(1,10))
print(a)

从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,而是一个生成器对象

生成器:
生成器本质上也是迭代器,以 list 容器为例,在使用该容器迭代一组数据时,必须事先将所有数据存储到容器中,才能开始迭代;而生成器却不同,它可以实现在迭代的同时生成元素。(也就是说,对于可以用某种算法推算得到的多个数据,生成器并不会一次性生成它们,而是什么时候需要,才什么时候生成。)

如果我们想要使用元组推导式获得新元组或新元组中的元素,有以下三种方式:

①使用 tuple() 函数,可以直接将生成器对象转换成元组,例如:

a = (x for x in range(1,10))
print(tuple(a))

在这里插入图片描述
② 直接使用 for 循环遍历生成器对象,可以获得各个元素,例如:

a = (x for x in range(1,10))
for i in a:
    print(i,end=" ")

在这里插入图片描述
③使用 next() 方法遍历生成器对象,也可以获得各个元素,例如:

a = (x for x in range(3))
print(a.__next__())
print(a.__next__())
print(a.__next__())
print("转换后的元组",tuple(a))

在这里插入图片描述
注意,无论是使用 for 循环遍历生成器对象,还是使用 next() 方法遍历生成器对象,遍历后原生成器对象将不复存在,这就是遍历后转换原生成器对象却得到空元组的原因。

Python 字典推导式

Python 中,使用字典推导式可以借助列表、元组、字典、集合以及 range 区间,快速生成符合需求的字典。

字典推导式的语法格式如下:

{表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]}

其中,用 [] 括起来的部分,可以使用,也可以省略。
可以看到,和其它推导式的语法格式相比,唯一不同在于,字典推导式用的是大括号{}。

#交换现有字典中各键值对的键和值。
old_dict = {"Tom":24,"Amy":16}

new_dict = {v:k for k,v in old_dict.items()}
print(new_dict)

在这里插入图片描述

Python 集合推导式

Python 中,使用集合推导式可以借助列表、元组、字典、集合以及 range 区间,快速生成符合需求的集合。
集合推导式的语法格式和字典推导式完全相同,如下所示:

{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }

其中,用 [] 括起来的部分,可以使用,也可以省略。

集合推导式和字典推导式的格式完全相同,那么给定一个类似的推导式,如何判断是哪种推导式呢?最简单直接的方式,就是根据表达式进行判断,如果表达式以键值对(key:value)的形式,则证明此推导式是字典推导式;反之,则是集合推导式。

既然生成的是集合,那么其保存的元素必须是唯一的。

tupledemo = (1,1,2,3,4,5,6,6)
new = {x**2 for x in tupledemo if x%2==0}
print(new)

在这里插入图片描述

二、zip 函数及用法

1.概念

zip() 函数是 Python 内置函数之一,它可以将多个序列(列表、元组、字典、集合、字符串以及 range() 区间构成的列表)“压缩”成一个 zip 对象。
所谓“压缩”,其实就是将这些序列中对应位置的元素重新组合,生成一个个新的元组。

zip() 函数的语法格式为:

zip(iterable, …)
其中 iterable,… 表示多个列表、元组、字典、集合、字符串,甚至还可以为 range() 区间。

2.用法

my_list = [1,2,3]
my_tuple = (4,5,6)
print([x for x in zip(my_list,my_tuple)])

my_dict = {"Name":"Tom",\
            "Sex":"boy",\
            "Age":24}
print({x for x in zip(my_dict)})

my_str1 = "Hello"
my_str2 = "Hi"
print([x for x in zip(my_str1,my_str2)])

在这里插入图片描述
在使用 zip() 函数“压缩”多个序列时,它会分别取各序
列中第 1 个元素、第 2 个元素、… 第 n 个元素,各自组成新的元组。需要注意的是,当多个序列中元素个数不一致时,会以最短的序列为准进行压缩。

另外,对于 zip() 函数返回的 zip 对象,既可以像上面程序那样,通过遍历提取其存储的元组,也可以向下面程序这样,通过调用 list() 函数将 zip() 对象强制转换成列表:

my_list = [1,2,3]
my_tuple = (4,5,6)
print(list(x for x in zip(my_list,my_tuple)))

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值