首页 > 编程语言 >【python基础之列表生成式】---列表生成式

【python基础之列表生成式】---列表生成式

时间:2023-12-15 19:44:48浏览次数:30  
标签:生成式 python 元素 列表 num numbers words

title:  【python基础之列表生成式】---列表生成式
date:  2023-12-15  19:37:06 
updated: 2023-12-15 19:37:00
description: 【python基础之列表生成式】---列表生成式
cover: 
       https://zhuanlan.zhihu.com/p/624339792

前言

由于之前也简述过相关列表生成式的一些内容,今天就单独将这个内容拿出来也当学习也当分享。

Python 中的列表生成式(List Comprehension)是一种简洁、高效的方式来生成新的列表。它可以在一个语句中创建一个新的列表,并且允许我们通过简洁的语法来筛选、转换或操作已有的列表。

列表生成式的基本语法

列表生成式的语法基本结构为:

new_list = [expression for item in iterable if condition]

其中:

  • expression:是一个表达式,用于对item进行操作,生成新的元素,这是列表生成式必须要有的部分。
  • item:是在iterable中的元素,可以是列表、元组、字符串、集合、字典等可迭代对象。
  • iterable:是一个可迭代对象,可以是列表、元组、字符串、集合、字典等。
  • condition:是一个可选的条件,用于筛选item,只有满足条件的item才会被加入到新列表中。

基本示例

让我们来看一个基本的示例。假设我们有一个列表,需要生成一个新的列表,其中每个元素是原列表中的元素的平方:

numbers = [1, 2, 3, 4, 5]
squares = [num ** 2 for num in numbers]
print(squares)  # 输出 [1, 4, 9, 16, 25]

在上面的代码中,我们使用列表生成式生成了一个新的列表squares,其中每个元素是原列表numbers中的元素的平方。列表生成式的语法为[num ** 2 for num in numbers],其中表达式num ** 2对原列表中的每个元素进行了操作,生成了一个新的元素。

带有条件的列表生成式

列表生成式还可以包含条件表达式,用于筛选原列表中的元素。例如,我们可以使用以下列表生成式,生成一个新的列表,其中只包含原列表中的偶数:

numbers = [1, 2, 3, 4, 5]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers)  # 输出 [2, 4]

在上面的代码中,我们使用带有条件的列表生成式[num for num in numbers if num % 2 == 0],生成了一个新的列表even_numbers,其中只包含原列表numbers中的偶数。条件表达式if num % 2 == 0用于筛选原列表中的元素,只有符合条件的元素才会被加入到新列表中。

嵌套列表生成式

嵌套列表生成式指的是在一个列表生成式中使用多个循环语句,来生成嵌套的列表。

其语法形式为:

[[expression] for item in iterable1 [for item2 in iterable2] ...]

其中,iterable1 为最外层循环的可迭代对象,iterable2 为内层循环的可迭代对象。expression 是生成元素的表达式,可以使用 itemitem2 以及其他变量。

下面以一个例子来说明:

matrix = [[i+j for j in range(3)] for i in range(4)]
print(matrix)

输出结果为:

[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]

在这个例子中,我们使用了两个循环语句,外层循环是 for i in range(4),内层循环是 for j in range(3)。在内层循环中,我们使用了 ij,并且计算了它们的和作为生成的元素,即 i+j。最终,通过列表生成式生成了一个 4 行 3 列的嵌套列表。

需要注意的是,内层循环的语句可以出现在外层循环的语句之前,但是生成的列表的结构是相同的。

使用函数

列表生成式不仅可以使用简单的表达式,还可以使用函数来对元素进行操作。通过在列表生成式中调用函数,可以对元素进行自定义的操作和处理。

例如,假设有一个字符串列表,我们想要对其中的每个字符串都进行反转操作,并生成一个新的列表。可以使用以下代码实现:

words = ['hello', 'world', 'python']
reverse_words = [word[::-1] for word in words]
print(reverse_words)

这里使用了字符串的切片操作来反转字符串。输出结果为:['olleh', 'dlrow', 'nohtyp']

除了使用字符串的切片操作,我们还可以使用内置函数 reversed() 来对字符串进行反转操作。例如:

def reverse_string(string):
    return ''.join(reversed(string))

words = ['hello', 'world', 'python']
reverse_words = [reverse_string(word) for word in words]
print(reverse_words)

这里定义了一个 reverse_string() 函数来对字符串进行反转操作。使用 join() 函数将反转后的字符串转换为字符串类型。输出结果和之前的一样:['olleh', 'dlrow', 'nohtyp']

使用函数可以让列表生成式更加灵活和强大,可以根据实际需求对元素进行自定义的操作和处理。

标签:生成式,python,元素,列表,num,numbers,words
From: https://www.cnblogs.com/queryH/p/17904089.html

相关文章

  • 【python基础之生成器】---生成器
    title:【python基础之生成器】---生成器date:2023-12-1418:54:06updated:2023-12-0619:42:00description:【python基础之生成器】---生成器cover:https://home.cnblogs.com/u/dream-ze/【一】什么是生成器?-Python中的生成器是一种特殊的迭代器,可以在需......
  • 解决方案 | pywintypes.com_error: (-2147221005, '无效的类字符串', None, None) --P
     1背景importpythoncomimportwin32com.clientimportmathwincad=win32com.client.Dispatch("AutoCAD.Application")#强制打开cad,该句发生报错信息doc=wincad.ActiveDocumentdoc.Utility.Prompt("Hello!Autocadfrompywin32com.\n")msp=doc.Mode......
  • Python——Html(表格)
    <table>,<tr>,和<td>是HTML中用于创建表格的标签。<table>元素:<table>元素用于定义HTML表格。表格是由行和列组成的二维数据结构。<table><!--表格内容将在这里添加--></table><tr>元素:<tr>元素用于定义表格中的行(tablerow)。行包......
  • Python_数据规整_宽表变长表-melt
    数据规整melt:英文融化、溶解melt函数的主要作用是将DataFrame从宽格式转换成长格式columnstovaluesmelt函数是把宽表转变为长表,pivot:英文旋转,以...为中心旋转'pivot函数把长表转换成宽表columnvaluestoindex,tocolumn,tovalue两者经常用于数据的长......
  • 【python基础之迭代器】 --- 迭代器
    title:【python基础之迭代器】---迭代器date:2023-12-1318:54:06updated:2023-12-1519:10:00description:【python基础之迭代器】---迭代器cover:https://home.cnblogs.com/u/dream-ze/【一】迭代器介绍迭代器,即用来迭代取值的工具,而迭代是重复反......
  • # yyds干货盘点 # 盘点一个Python正则表达式的问题
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【崔艳飞】问了一个Python正则表达式的问题,一起来看看吧。问题如下:'/H/H_OMC*/Mo/20231128/share',各位大神,引号内的*通配符,咋让起作用?加个引号,不灵了。二、实现过程这里【哎呦喂 是豆子~】、【莫生气】给了一个指导,比方说加......
  • python初试二
    连接数据库Django为多种数据库后台提供了统一的调用API。根据需求不同,Django可以选择不同的数据库后台。MySQL算是最常用的数据库。我们这里将Django和MySQL连接。在Linux终端下启动mysql:$mysql-uroot-p在MySQL中创立Django项目的数据库:mysql>CREATEDATABASEvillaDEFAULT......
  • Python多线程编程:竞争问题的解析与应对策略
    本文将深入探讨Python多线程编程中可能出现的竞争问题、问题根源以及解决策略,旨在帮助读者更好地理解、应对并发编程中的挑战。多线程竞争问题的复杂性源自于对共享资源的并发访问和操作。在不同线程间的交叉执行中,共享资源可能因无序访问而导致数据不一致、死锁或饥饿等问题。解决......
  • 【创意、创造】用 Python pandas做一个读取Excel,再写入新的Excel小工具
    Python很好很强大,1.5天时间,简化很多重复的劳动,哈哈~ importpandasaspdimportdatetimeasdtdefhandleFrontEnd():#处理【上周前端发版】开始sheet_front_end=pd.read_excel('D:\某前端原文件.xlsx',sheet_name='Sh......
  • python flask 生产环境部署,基于gunicorn
    1.安装gunicorn,部分生产服务器会存在多个pip版本,一般用pip和pip3区分,本文中用pippipinstallgunicorn2.启动程序cd/usr/appgunicorn--workers2-b0.0.0.0:5056app:app 验证项目正常后继续如下操作3.配置gunicorn配置文件查看centos版本cat/etc/redhat-releas......