-
2021-01-14 07:35:05
列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。
例如,假设我们想创建一个平方列表,像这样
>>> squares = []
>>> for x in range(10):
... squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
注意这里创建(或被重写)的名为 x 的变量在for循环后仍然存在。我们可以计算平方列表的值而不会产生任何副作用
squares = list(map(lambda x: x**2, range(10)))
或者,等价于
squares = [x**2 for x in range(10)]
上面这种写法更加简洁易读。
Python列表推导式的结构是由一对方括号所包含的以下内容:一个表达式,后面跟一个 for 子句,然后是零个或多个 for或 if 子句。 其结果将是一个新列表,由对表达式依据后面的 for 和 if 子句的内容进行求值计算而得出。 举例来说,以下列表推导式会将两个列表中不相等的元素组合起来:
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
而它等价于
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
注意在上面两个代码片段中, for 和 if 的顺序是相同的。
如果表达式是一个Python元组(例如上面的 (x, y)),那么就必须加上括号
>>>
>>> vec = [-4, -2, 0, 2, 4]
>>> # create a new list with the values doubled
>>> [x*2 for x in vec]
[-8, -4, 0, 4, 8]
>>> # filter the list to exclude negative numbers
>>> [x for x in vec if x >= 0]
[0, 2, 4]
>>> # apply a function to all the elements
>>> [abs(x) for x in vec]
[4, 2, 0, 2, 4]
>>> # call a method on each element
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> # create a list of 2-tuples like (number, square)
>>> [(x, x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
>>> # the tuple must be parenthesized, otherwise an error is raised
>>> [x, x**2 for x in range(6)]
File "", line 1, in
[x, x**2 for x in range(6)]
^
SyntaxError: invalid syntax
>>> # flatten a list using a listcomp with two 'for'
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表推导式可以使用复杂的表达式和嵌套函数
>>> from math import pi
>>> [str(round(pi, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']
更多相关内容 -
python 列表推导和嵌套循环速度对比
2021-01-14 07:35:06最近看到有这么一段代码,功能为初始化一个单位矩阵,使用的嵌套循环的方式功能上这么实现没啥问题,就是看着有点不太简洁,所以想着能不能用列表推导实现,顺便也比较一下两者的速度差距。使用time计时,matplotlib...最近看到有这么一段代码,功能为初始化一个单位矩阵,使用的嵌套循环的方式
功能上这么实现没啥问题,就是看着有点不太简洁,所以想着能不能用列表推导实现,顺便也比较一下两者的速度差距。
使用time计时,matplotlib绘制时间曲线
import time
from matplotlib import pyplot as plt
def eye_for(row, col):
m = []
for i in range(row):
m.append([])
for i in range(row):
for j in range(col):
m[i].append(1 if i == j else 0)
return m
def eye_exp(row, col):
return [
[
1 if i == j else 0
for j in range(col)
]
for i in range(row)
]
def test(row, col):
st1 = time.time()
eye_for(row, col)
ed1 = time.time()
st2 = time.time()
eye_exp(row, col)
ed2 = time.time()
return ed1 - st1, ed2 - st2
def main():
print(eye_for(3, 4)) # [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]
print(eye_exp(3, 4)) # [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]
ps1 = []
ps2 = []
for i in range(1, 13):
y1, y2 = test(i * 100, i * 100)
ps1.append(y1)
ps2.append(y2)
plt.plot(ps1, 'b', label='for')
plt.plot(ps2, 'r', label='exp')
plt.legend()
plt.show()
main()
在我的乞丐版surface上的结果
基本上可以看到for循环的方式是推导式的两倍, so... 列表推导不仅代码量少, 而且速度上也有很大的优势,关键很pythonic!
-
Python的列表推导式和嵌套列表推导式
2021-12-05 18:15:06推导式 推导式的基本形式: [expr for val in Collection if condition] 简单翻译一下: [操作 for 值 in 容器 if 条件] strings = ['bat','alibaba','as','v','condi'] [x.upper() for x in strings if len(x) >...推导式
推导式的基本形式:
[expr for val in Collection if condition]
简单翻译一下:
[操作 for 值 in 容器 if 条件]strings = ['bat','alibaba','as','v','condi'] [x.upper() for x in strings if len(x) > 2]
[]已经说明了是个列表 集合换为{}即可,如下:
str_len = {len(x) for x in strings} str_len
它等同于利用map函数:
set(map(len,strings))
map函数是一种更函数化、更简洁的表达。map()会根据提供的函数对指定序列做映射。形如map(function, iterable, …)下面是个小例子
def square(x): return x ** 2 list(map(square, [1,2,3,4,5])) list(map(lambda x: x ** 2, [2, 3, 5, 7]))
一个结合内建序列函数enumerate、将字符串与其位置相匹配的字典作为字典推导式的示例
loc_mapping = {val: index for index, val in enumerate(strings)} loc_mapping
嵌套列表推导式
嵌套推导式的基本形式:
[expr for collection in collections for val in collection if condition]
再次简单翻译一下:
[操作 for 小容器 in 大容器 for 值 in 小容器 if 条件] 从外到内直到取到最小的单位,有几层就for几次all_data = [['vince', 'lily','todd', 'josep'],['rik','jason', 'luna', 'steven']] double_d_name =[name.upper() for names in all_data for name in names if name.count('d') >= 2] double_d_name
这是一个包含列表的列表,所以需要for两次,第一次为for 列表 in 总列表,第二次为for name in 列表, 操作为将得到的name变为大写,条件为name中有两个d。
列表推导式是最受欢迎的Python特性之一,但是当嵌套多层之后当考虑代码的可读性。
some_tuple = [(1 ,2, 3), (4, 5, 6), (7, 8, 9)] [x for tup in some_tuple for x in tup]#拆开元组 [[x for x in tup] for tup in some_tuple]#拆开为多层列表
部分例子引用《利用Python进行数据分析》一书
-
【python】理解列表推导式以及列表推导式嵌套
2020-12-20 17:28:17列表推导式 所谓列表推导式,就是将一个可迭代的列表遍历,将每次遍历的元素拿出来进行一些操作,并用一个【】括起来,组成一个新的列表 语法 [expression for i in item if condition] expression 就是对每一个...列表推导式
所谓列表推导式,就是将一个可迭代的列表遍历,将每次遍历的元素拿出来进行一些操作,并用一个【】括起来,组成一个新的列表
语法
[expression for i in item if condition]
expression 就是对每一个元素的具体操作表达式;
item是某个可迭代对象的元素,如列表,元组或字符串等对象每次迭代的对象;
if condition 是对每一个元素做分支判断,
如果条件符合,则expression操作对应的元素.为了更好地说明列表表达式例子
>>> arr = [1,2,3,4,5] >>> list = [item + 1 for item in arr] >>> list [2, 3, 4, 5, 6]
列表推导式嵌套
列表推导式的嵌套实际上就是,使用循环 + 列表推导式,将多维列表降维成一维列表
即 列表推导式嵌套 = 循环嵌套 + 列表推导式
步骤
列表推导式嵌套就是使用循环加上列表推导式的组合
input = [[('A', 1), ('B', 2)], [('C', 3), ('D', 4)]] # 以将input展开为一维列表为例
1.使用循环将多维列表变成一维的
>>> for row in input
2.嵌套一个循环将一维列表遍历为元素
>>> for row in input for item in row
3.使用列表推导式将元素组合为列表
>>> [item for row in input for item in row] [[('A', 1), ('B', 2)], [('C', 3), ('D', 4)]]
-
Python列表推导式循环嵌套形式详解与应用
2020-12-06 12:24:30在Python中使用列表推导式循环嵌套形式,也是有利于大大简化语言,非常简洁就实现循环嵌套。 这些Python专有的表达式,我们称之为Python语句,很Python. # Python 专用的列表表达式-循环嵌套形式 [expression for i ... -
python中的嵌套列表推导式
2022-01-08 18:08:13 -
Python列表推导式之嵌套的推导解析
2020-11-19 22:18:33直接看代码: Microsoft Windows [版本 10.0.18363.1198] ...Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "lice -
python-列表推导式中的多层for嵌套、多层if else嵌套,情况分析和小结
2022-04-21 15:47:40python-列表推导式中的多层for嵌套、多层if else嵌套,情况分析和小结 -
Python列表推导式玩法
2021-04-27 03:11:51一些基础的之前已经是反复温习和使用了,今天我们来学习它的进阶版--》列表推导式。列表推导式:优点:是将所有的值一次性加载到内存中,相比于for循环生成的列表执行速度快,并且语法精简,一行代码就完成for循环... -
python列表推导式中的多层for循环if-else嵌套
2020-12-05 03:41:53一、列表推导式中的if-else:1、只有一个if[x for x in data if condition]2、只有一个if-else[exp1 if condition else exp2 for x in data]3、多层if-elsea=['零' if i==0 else '三' if i==3 else '五' if i==5 else... -
Python中的嵌套列表推导式
2017-12-25 15:58:44python列表推导式处理嵌套列表 -
Python列表推导式
2021-01-20 02:55:32列表推导式书写形式:list = [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件] , 记得加[ ] 多重嵌套:example = [[1,2,3],[4,5,6],[7,8,9],[10]] list = [表达式 for 变量1 in ... -
Python教程:列表推导式和嵌套的列表推导式讲解
2022-04-06 16:48:101.列表推导式 列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。 例如,假设我们想... -
Python 列表推导式
2020-12-03 09:48:05列表推导式(list comprehension)是利用其它列表创建新列表的一种方式。它的工作方式类似于for循环,例如:>>> [x*x for x in range(10)]>>> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]上面列表推导式... -
python列表推导式中使用if和if-else
2021-06-29 22:02:20在python中,使用列表推导式来完成一些程序逻辑会让程序更为简洁。 本文将用案例的形式教会你如何在列表推导式中使用if...else 目录 1、语法结构 2、实例演示 1、语法结构 列表推导式总共以下有两种形式: 1... -
Python各种推导式(列表推导式,字典推导式,集合推导式,嵌套列表推导式)
2019-03-10 22:35:28Python官网列表推导式部分 列表推导式提供了一种创建list的简便方法。应用程序创建列表时,列表中的元素来源于其他序列、可迭代对象或创建的一个满足一定条件的序列。 基本格式: [表达式 for 变量 in 列表] 或者... -
python用列表生成式写嵌套循环的方法
2020-12-25 05:44:19将两个嵌套for循环写成一个列表生成式 ...以上这篇python用列表生成式写嵌套循环的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:通过代码 -
Python列表推导式详解
2020-11-30 07:16:38前面我们详细介绍了 for 循环的操作细节。其实,还有一个“精简”版的 for 循环,称为推导式(comprehensions,又称解析式),它是 Python 中的一种独有特性。它能够非常简洁地按照某种规则,...Python列表推导式概... -
python 列表推导式详解
2020-10-19 20:27:13推导式comprehensions(又称解析式),是Python的一种独有特性,可以从一个数据序列构建另一个新的数据序列。具有使用方便,让代码看起来很高级的功能。 分析 考虑以下需求: a=[1,2,3,'a','b','c'] 要取出列表中... -
python列表推导式-for的用法
2021-01-13 14:57:57python列表推导式for的用法 列表推导式的作用:利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表 语法格式: <表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] > ps:... -
【Python】推导式(列表推导式、元组推导式、字典推导式、集合推导式)详解
2021-07-21 09:53:13列表推导式、元组推导式、字典推导式、集合推导式列表推导式元组推导式字典推导式集合推导式 推导式(又称解析器),是 Python 独有的一种特性。 使用推导式可以快速生成列表、元组、字典以及集合类型的数据,因此... -
python列表推导式 for循环
2021-09-19 09:35:46列表推导式 列表推导式,是用非常简洁的方式对列表或其他可迭代对象的元素进行遍历、过滤或再次计算,快速生成满足特定需求的新列表。列表推导式的语法格式如下: [表达式for迭代变量in可迭代对象[if条件表达式]] ... -
Python 列表推导式使用的注意事项
2021-03-17 02:52:36python视频教程栏目介绍Python列表推导式的使用。Python 列表推导式并不是给初学者用的,因为它非常反直觉,甚至对于有其他编程语言背景的人也是如此。我们接触到 List 的使用时,学习的内容都是零散的。所以我们... -
Python-列表推导式
2022-01-11 09:34:45文章目录一、while实现二、for实现三、列表推导式实现四、带if的列表推导式五、多for实现列表推导式 示例:把0-10之间的数据打印出来 解决思路: 1、创建空列表 2、循环把有规律的数据写入列表 一、while实现 代码... -
Python 列表推导式使用注意事项
2021-03-18 01:05:06Python教程栏目今天翻译介绍列表推导式使用的注意事项。Python 列表推导式使用注意事项Python 列表推导式并不是给初学者用的,因为它非常反直觉,甚至对于有其他编程语言背景的人也是如此。我们接触到 List 的使用时... -
Python列表推导式(更有风格的Python代码写法)
2022-05-04 16:21:36Python中只有三种推导式,分别是列表推导式、字典推导式和集合推导式。 列表推导式又叫做列表生成式。 作用:化简代码,用一个表达式创建一个有规律的列表或控制一个有规律列表。 一、体验列表推导式 需求:... -
Python(四)列表与列表推导式
2018-06-09 18:04:54一、列表1、常用的列表对象方法方法说明lst.append(x)将元素x添加至列表lst尾部lst.extend(L)将列表L中所有元素添加至列表lst尾部lst.insert(index,x)在列表lst指定位置index处添加元素x,该位置后面所有元素后移一... -
Python 列表推导式需要注意的地方
2021-06-17 11:54:38原文地址: [ The Do’s and Don’ts of Python List Comprehension ](https://medium.com/better-programming/the-dos-and-don-ts-of-python-list- comprehension-5cd0f5d18500) 原文作者:Yong Cui, Ph.D. 译文...