python列表推导式、字典推导式、集合推导式

python列表推导式、字典推导式、集合推导式

推导式(comprehensions,又称解析式)是Python的一种独有特性,推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导,在Python2和3中都有支持。

  • 列表推导式
  • 字典推导式
  • 集合推导式

接下来一个一个给大家演示。

列表推导式

生成list

格式

格式 变量名 = [输出 for 循环 if判断]
参数:
输出生成列表元素的表达式,可以是有返回值的函数
循环普通的for循环
判断判断条件,在for循环中符合条件才会输出生成列表

示例一:输出为表达式

	# [0, 10)区间内, 能被2整除的数的平方
    my_list = [i ** 2 for i in range(10) if i % 2 is 0]
    print(type(my_list))  # 返回值类型是list
    print(my_list)

运行结果:
在这里插入图片描述

示例二:输出为函数(有返回值)

def fun(x):
    return x * 2


if __name__ == '__main__':
    # [0, 10)区间内, 能被2整除的数乘以2
    my_list = [fun(i) for i in range(10) if i % 2 is 0]
    print(type(my_list))  # 返回值类型是list
    print(my_list)

运行结果:
在这里插入图片描述

生成generator

只需要将列表推导式的[]改成()即可得到生成器。
格式变量名 = (输出 for 循环 if判断)
参数同上
示例:

	# [0, 10)区间内, 能被2整除的数的平方
	my_generator = (i ** 2 for i in range(10) if i % 2 is 0)
    print(type(my_generator))  # 返回值类型是generator
    my_list = list(my_generator)
    print(my_list)

运行结果:
在这里插入图片描述

字典推导式

字典推导式和列表推导式的格式是类似的,只不过中括号该改成大括号而已。区别就是字典推导式返回值的类型是字典

示例一:把字典中的key和value对调

	my_dict = {'a': 10, 'b': 34, 'c': 27}
    my_dict1 = {z: j for j, z in my_dict.items()}  # 全部对调
    my_dict2 = {z: j for j, z in my_dict.items() if j == "a"}  # 加上判断条件
    print("type(my_dict1)", type(my_dict1))
    print("my_dict1", my_dict1)
    print("my_dict2", my_dict2)

在这里插入图片描述

示例二:zip转换成字典

zip函数1返回值是zip类型的,可以转换成字典

	# zip转换成字典
    d = {h: v for h, v in zip(["a", "b", "c"], [4, 5, 6])}
    # zip转换成字典,同样也可以加判断条件
    d2 = {h: v for h, v in zip(["a", "b", "c"], [4, 5, 6]) if h == "a"}
    print(d)
    print(d2)

在这里插入图片描述

集合推导式

格式

格式 变量名 = {输出 for 循环 if判断}

与列表推导式的区别

从格式上来看,集合推导式列表推导式的格式是类似的,但是他们区别比较大的。

集合推导式列表推导式的区别:

  1. 不使用中括号,使用大括号
  2. 返回值类型是一个set(集合)
  3. 结果中无重复元素

示例:

	# 将列表中的每一个元素平方
    my_squared = {x ** 2 for x in [1, 1, 2, 2, 3]}
    print(type(my_squared))
    print(my_squared)

运行结果:
在这里插入图片描述


  1. zip()函数详解 ↩︎

发布了85 篇原创文章 · 获赞 90 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/engerla/article/details/90023278