Python中的列表推导式(List Comprehension)

2023-10-09 17:36

本文主要是介绍Python中的列表推导式(List Comprehension),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

列表推导式

列表推导式(List Comprehension)是Python提供的一种简洁而优雅的方式,用于创建列表。它通常可以用来代替简单的for循环。

基本格式

列表推导式的基本格式如下:

[expression for item in iterable if condition]
  • expression 是根据迭代的每个元素计算得出的表达式。
  • for item in iterable 是迭代部分,它会遍历iterable中的每个元素。
  • if condition 是可选部分,用于过滤元素。

示例

  1. 创建一个列表,其中包含0到9的平方:

    squares = [x*x for x in range(10)]
    print(squares)  # 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
  2. 从一个列表中选择偶数:

    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    evens = [x for x in numbers if x % 2 == 0]
    print(evens)  # 输出:[2, 4, 6, 8]
    
  3. 将列表中的元素都转换为大写:

    words = ["hello", "world"]
    uppercased = [word.upper() for word in words]
    print(uppercased)  # 输出:['HELLO', 'WORLD']
    

嵌套列表推导式

还可以在列表推导式中嵌套其他的for循环:

pairs = [(x, y) for x in [1, 2, 3] for y in [4, 5, 6]]
print(pairs)  # 输出:[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

注意事项

  • 列表推导式虽然简洁,但当它们变得过于复杂时,可读性可能会受到影响。在这种情况下,使用传统的for循环可能是更好的选择。

  • 列表推导式不仅仅局限于列表。还可以使用字典推导式(用于创建字典)和集合推导式(用于创建集合)。

  • 在大数据量的情况下,使用生成器表达式(generator expression)可能比列表推导式更有优势,因为它产生的是一个迭代器而不是一个完整的列表。例如:(x*x for x in range(10))

总的来说,列表推导式是Python的一个强大和优雅的功能,但与所有工具一样,最重要的是明智地使用它。

字典推导式

字典推导式(Dictionary Comprehension)是Python中创建字典的一种简洁方式,其语法和列表推导式相似,但是用于生成键值对组成的字典。字典推导式可以提高代码的简洁性并提高可读性(当用适当地时)。

基本格式

字典推导式的基本格式如下:

{key_expression: value_expression for item in iterable if condition}
  • key_expressionvalue_expression 分别计算每个键和值。
  • for item in iterable 是迭代部分,它会遍历iterable中的每个元素。
  • if condition 是可选的,用于过滤某些元素。

示例

  1. 创建一个字典,其中键是数字,值是该数字的平方:

    squares = {x: x*x for x in (2, 3, 4)}
    print(squares)  # 输出:{2: 4, 3: 9, 4: 16}
    
  2. 反转字典中的键和值:

    original = {"a": 1, "b": 2, "c": 3}
    reversed_dict = {value: key for key, value in original.items()}
    print(reversed_dict)  # 输出:{1: 'a', 2: 'b', 3: 'c'}
    
  3. 使用字典推导式过滤字典元素:

    prices = {"apple": 1.5, "banana": 0.5, "cherry": 2}
    expensive_fruits = {fruit: price for fruit, price in prices.items() if price > 1}
    print(expensive_fruits)  # 输出:{'apple': 1.5, 'cherry': 2}
    

注意事项

  • 虽然字典推导式可以使代码更简洁,但如果推导式过于复杂,可能会降低代码的可读性。在这种情况下,使用传统的循环构建字典可能更有意义。

  • 字典推导式和列表推导式在形式上很相似,但它们之间的一个主要区别是,字典推导式需要为每个元素提供键和值,而列表推导式只需要一个值。

  • 同样的,Python也支持集合推导式,它用于生成集合。

总的来说,字典推导式是Python中创建字典的一个优雅和强大的工具,但它的使用应该是考虑到特定上下文和可读性的。

集合推导式

集合推导式(Set Comprehension)是Python中创建集合的一种简洁方法。与列表推导式和字典推导式类似,集合推导式提供了一种简洁的语法来基于现有的可迭代对象生成集合。

基本格式

集合推导式的基本格式如下:

{expression for item in iterable if condition}
  • expression 是基于每个元素的计算得到的表达式。
  • for item in iterable 是迭代部分,它会遍历iterable中的每个元素。
  • if condition 是可选的,用于过滤某些元素。

示例

  1. 创建一个集合,其中包含0到9的奇数:

    odds = {x for x in range(10) if x % 2 != 0}
    print(odds)  # 输出:{1, 3, 5, 7, 9}
    
  2. 从列表中删除重复元素(尽管直接使用set()函数更简单,但这里展示的是推导式的用法):

    numbers = [1, 2, 2, 3, 4, 4, 4, 5]
    unique_numbers = {x for x in numbers}
    print(unique_numbers)  # 输出:{1, 2, 3, 4, 5}
    
  3. 获取一个句子中所有不重复的单词

    sentence = "apple banana apple cherry banana"
    unique_words = {word for word in sentence.split()}
    print(unique_words)  # 输出:{'apple', 'banana', 'cherry'}
    

注意事项

  • 与列表和字典推导式一样,集合推导式也应该在适当的时候使用,以保持代码的可读性。如果推导式变得过于复杂,使用传统的循环可能更为明智。

  • 因为集合是无序的,所以集合推导式生成的集合元素不保证有特定的顺序。

  • 集合中的元素是唯一的,所以集合推导式不会产生重复的元素,即使源可迭代对象中存在重复元素。

总的来说,集合推导式是Python中创建集合的一个简洁和优雅的工具。当需要根据已有数据快速生成集合时,它是一个非常有用的工具。

生成器表达式

生成器表达式(Generator Expression)是Python中的一种构造生成器(generator)的简洁方法。生成器是一个特殊类型的迭代器,它可以遍历元素,但不需要在内存中一次性存储所有元素。相反,生成器会在每次迭代时“按需”生成元素。

生成器表达式在形式上与列表推导式很相似,但使用圆括号()而不是方括号[]

基本格式

生成器表达式的基本格式如下:

(expression for item in iterable if condition)
  • expression 是基于每个元素的计算得到的表达式。
  • for item in iterable 是迭代部分,它会遍历iterable中的每个元素。
  • if condition 是可选的,用于过滤某些元素。

示例

  1. 创建一个生成器,该生成器产生0到9的平方:

    gen = (x*x for x in range(10))
    for value in gen:print(value)  # 依次输出:0, 1, 4, 9, 16, 25, 36, 49, 64, 81
    
  2. 计算生成器中的元素总和:

    gen = (x*x for x in range(10))
    total = sum(gen)
    print(total)  # 输出:285
    
  3. 与列表推导式的内存效率对比:

    # 使用列表推导式创建一个大列表
    big_list = [x*x for x in range(1000000)]# 使用生成器表达式创建一个生成器
    gen = (x*x for x in range(1000000))
    

    在上面的例子中,big_list会立即分配足够的内存来存储一百万个元素。而gen只是一个生成器,实际上不存储任何元素,而是在每次迭代时生成它们。因此,使用生成器可以节省大量内存。

注意事项

  • 生成器只能迭代一次。这是因为它们不实际存储数据,而是动态生成数据。一旦生成器迭代完成,不能再次从头开始迭代,除非重新创建生成器。

  • 生成器表达式特别适合处理大数据流,因为它们可以避免一次性加载整个数据集。

  • 如果需要多次访问数据或需要数据的随机访问能力,那么使用列表或其他数据结构可能更为合适。

总的来说,生成器表达式为创建轻量级、内存友好的迭代器提供了一个简洁和优雅的方法,特别是在处理大量数据时。


.items() 是 Python 字典对象(dict)的一个方法。它返回字典的所有键值对,使我们可以方便地遍历字典的键和值。

基本使用

当调用字典的 .items() 方法时,它会返回一个包含元组的视图对象,其中每个元组都包含一个键和一个值。这允许我们同时迭代字典的键和值。

示例:

dict_example = {"a": 1,"b": 2,"c": 3
}for key, value in dict_example.items():print(key, value)# 输出:
# a 1
# b 2
# c 3

特点

  1. 视图对象: .items() 返回的不是一个新的列表或其他集合,而是一个视图对象。这意味着该对象会反映字典的任何变化。如果字典在遍历其 .items() 时被修改(例如,添加或删除条目),则可能会出现运行时错误。

  2. 与推导式结合: 可以与各种推导式结合使用 .items(),例如列表推导式、字典推导式和集合推导式。

    示例:

    dict_example = {"a": 1,"b": 2,"c": 3
    }# 使用字典推导式将键和值颠倒
    reversed_dict = {value: key for key, value in dict_example.items()}
    print(reversed_dict)  # 输出: {1: 'a', 2: 'b', 3: 'c'}
    
  3. 与其他方法结合: 除了 .items(),字典还有 .keys().values() 方法,分别用于获取字典的键和值。

注意事项

  • 当想要同时处理字典的键和值时,使用 .items() 方法是很有用的。但是,如果只需要键或值,那么 .keys().values() 可能更为合适。

  • 因为 .items() 返回的是一个视图对象,而不是一个真正的列表,所以如果需要一个可以多次使用或修改的列表,可能需要使用 list() 函数将其转换为一个列表。

    示例:

    dict_example = {"a": 1,"b": 2,"c": 3
    }items_list = list(dict_example.items())
    print(items_list)  # 输出: [('a', 1), ('b', 2), ('c', 3)]
    

总的来说,.items() 方法提供了一种简洁的方式来遍历字典的键和值,并广泛用于各种操作,如推导式、循环和条件检查。

这篇关于Python中的列表推导式(List Comprehension)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/174470

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',