精华内容
下载资源
问答
  • Python列表推导式嵌套的列表推导式
    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']

    更多相关内容
  • 最近看到有这么一段代码,功能为初始化一个单位矩阵,使用的嵌套循环的方式功能上这么实现没啥问题,就是看着有点不太简洁,所以想着能不能用列表推导实现,顺便也比较一下两者的速度差距。使用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!

    展开全文
  • 推导式 推导式的基本形式: [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进行数据分析》一书

    展开全文
  • 列表推导式 所谓列表推导式,就是将一个可迭代的列表遍历,将每次遍历的元素拿出来进行一些操作,并用一个【】括起来,组成一个新的列表 语法 [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中使用列表推导式循环嵌套形式,也是有利于大大简化语言,非常简洁就实现循环嵌套。 这些Python专有的表达式,我们称之为Python语句,很Python. # Python 专用的列表表达式-循环嵌套形式 [expression for i ...
  • 直接看代码: 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嵌套,情况分析和小结
  • Python列表推导式玩法

    2021-04-27 03:11:51
    一些基础的之前已经是反复温习和使用了,今天我们来学习它的进阶版--》列表推导式列表推导式:优点:是将所有的值一次性加载到内存中,相比于for循环生成的列表执行速度快,并且语法精简,一行代码就完成for循环...
  • 一、列表推导式中的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:44
    python列表推导式处理嵌套列表
  • 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 ...
  • 1.列表推导式 列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。 例如,假设我们想...
  • 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官网列表推导式部分 列表推导式提供了一种创建list的简便方法。应用程序创建列表时,列表中的元素来源于其他序列、可迭代对象或创建的一个满足一定条件的序列。 基本格式: ​[表达式 for 变量 in 列表] 或者...
  • 将两个嵌套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的用法 列表推导式的作用:利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表 语法格式: <表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] > ps:...
  • 列表推导式、元组推导式、字典推导式、集合推导式列表推导式元组推导式字典推导式集合推导式 推导式(又称解析器),是 Python 独有的一种特性。 使用推导式可以快速生成列表、元组、字典以及集合类型的数据,因此...
  • 列表推导式 列表推导式,是用非常简洁的方式对列表或其他可迭代对象的元素进行遍历、过滤或再次计算,快速生成满足特定需求的新列表。列表推导式的语法格式如下: [表达式for迭代变量in可迭代对象[if条件表达式]] ...
  • python视频教程栏目介绍Python列表推导式的使用。Python 列表推导式并不是给初学者用的,因为它非常反直觉,甚至对于有其他编程语言背景的人也是如此。我们接触到 List 的使用时,学习的内容都是零散的。所以我们...
  • Python-列表推导式

    2022-01-11 09:34:45
    文章目录一、while实现二、for实现三、列表推导式实现四、带if的列表推导式五、多for实现列表推导式 示例:把0-10之间的数据打印出来 解决思路: 1、创建空列表 2、循环把有规律的数据写入列表 一、while实现 代码...
  • Python教程栏目今天翻译介绍列表推导式使用的注意事项。Python 列表推导式使用注意事项Python 列表推导式并不是给初学者用的,因为它非常反直觉,甚至对于有其他编程语言背景的人也是如此。我们接触到 List 的使用时...
  • Python中只有三种推导式,分别是列表推导式、字典推导式和集合推导式。 列表推导式又叫做列表生成式。 作用:化简代码,用一个表达式创建一个有规律的列表或控制一个有规律列表。 一、体验列表推导式 需求:...
  • 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,该位置后面所有元素后移一...
  • 原文地址: [ 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. 译文...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,841
精华内容 3,536
关键字:

python列表推导式嵌套