python 列表理解 double for

2024-04-19

vec = [[1,2,3], [4,5,6], [7,8,9]]
print [num for elem in vec for num in elem]      <----- this

>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]

这是在骗我。
我知道 elem 是列表中的列表for elem in vic
我不太明白的用法num and for num in elem在开始和结束时。

python 是如何解释这个的?
它查看的顺序是什么?


让我们分解一下。

一个简单的列表理解:

[x for x in collection]

如果我们把它分成几个部分,这就很容易理解了:[A for B in C]

  • A是结果列表中的项目
  • B是集合中的每一项C
  • C是集合本身。

这样,就可以写出:

[x.lower() for x in words]

为了将列表中的所有单词转换为小写。


当我们用另一个列表将其复杂化时,如下所示:

[x for y in collection for x in y] # [A for B in C for D in E]

在这里,发生了一些特别的事情。我们希望我们的最终清单包括A物品,以及A里面发现了物品B项目,所以我们必须告诉列表理解。

  • A是结果列表中的项目
  • B是集合中的每一项C
  • C是集合本身
  • D是集合中的每一项E(在这种情况下,也A)
  • E是另一个集合(在本例中,B)

这个逻辑类似于普通的 for 循环:

for y in collection:     #      for B in C:
    for x in y:          #          for D in E: (in this case: for A in B)
        # receive x      #              # receive A

为了扩展这一点,并给出一个很好的例子+解释,想象有一列火车。

火车引擎(前面)总是在那里(列表理解的结果)

那么,有任意数量的火车车厢,每节火车车厢的形式为:for x in y

列表理解可能如下所示:

[z for b in a for c in b for d in c ... for z in y]

这就像有这个常规的 for 循环:

for b in a:
    for c in b:
        for d in c:
            ...
                for z in y:
                    # have z

换句话说,在列表理解中,您只需将下一个循环添加到末尾,而不是向下一行并缩进。

回到火车的比喻:

Engine - Car - Car - Car ... Tail

尾巴是什么?尾部在列表推导式中是一个特殊的东西。你不need一个,但是如果有尾巴,尾巴就是一个条件,看这个例子:

[line for line in file if not line.startswith('#')] 

这将为您提供文件中的每一行,只要该行不以主题标签开头(#),其他的就跳过了。

使用火车“尾部”的技巧是,当您从所有循环中获得最终“引擎”或“结果”时,会同时检查它的真/假,上面的示例是常规 for 循环看起来像这样:

for line in file:
    if not line.startswith('#'):
        # have line

请注意:虽然在我对火车的类比中,火车的末端只有一个“尾巴”,但条件或“尾巴”可以在every“汽车”或循环...

例如:

>>> z = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
>>> [x for y in z if sum(y)>10 for x in y if x < 10]
[5, 6, 7, 8, 9]

在常规 for 循环中:

>>> for y in z:
    if sum(y)>10:
        for x in y:
            if x < 10:
                print x

5
6
7
8
9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 列表理解 double for 的相关文章

  • 存储为 np.arrays 的不同数据集的分组堆积条形图

    我正在研究一个平衡问题 我想比较一些数据 我想通过创建不同年份的堆叠条形图来做到这一点 每年 我想要两个不同数据集的堆叠条形图 我正在尝试创建一种 分组堆积条形图 我设法创建了我想要比较的 2 个堆叠条形图 但它们仍然位于两个不同的图中 我
  • from __future__ importabsolute_import 实际上做了什么?

    I have answered https stackoverflow com a 22679558 2588818一个关于Python中绝对导入的问题 我认为我通过阅读理解了这个问题Python 2 5 变更日志 https docs p
  • Python:我可以修改元组吗?

    我有一个 2 D 元组 实际上我以为 它是一个列表 但错误说它是一个元组 但无论如何 该元组的形式为 浮点数 val prod id 现在我有一个字典 其中包含 key gt prod id 和 value prod name 现在 我想将
  • python列表理解和extend() [重复]

    这个问题在这里已经有答案了 深入学习 Python 2 7 1 但未能理解这一点 几个小时 gt gt gt a 1 2 gt gt gt b 3 4 gt gt gt gt gt gt a extend b 0 gt gt gt a 1
  • 不要在异常堆栈中显示 Python raise-line

    当我在 Python 库中引发自己的异常时 异常堆栈将引发行本身显示为堆栈的最后一项 这显然不是一个错误 在概念上是正确的 但是当您在外部使用代码 例如作为模块 时 它会将重点放在对调试无用的东西上 有没有办法避免这种情况并强制 Pytho
  • 为什么 Dash 在上传文件时会出现解析错误?

    上传 Excel 或 CSV 会导致错误 我遵循了 Dash 演示 但是当我尝试扩展它来执行绘图之类的操作时 它就不起作用了 我不想只显示一张桌子 Dash Table 函数已更新 因此之前使用 Dash Table Experiments
  • 将 KB/MB/GB 等字符串解析为数值

    为了不发明自行车 我想知道是否有任何库能够将大小字符串 MB KB TB MiB KiB 等 的各种表示形式解析为基于数字字节的值 ActiveState Receipes 有一个示例here http code activestate c
  • 如何在Python中通过URL下载Azure Blob存储文件?

    我正在尝试从我的存储帐户下载 Azure Blob 存储文件 为此 我检查了 URL 是什么 并且正在执行以下操作 with urllib request urlopen
  • 使用底图和Python在地图中绘制海洋

    我正在绘制此处提供的 netCDF 文件 https goo gl QyUI4J https goo gl QyUI4J Using the code below the map looks like this 然而 我希望海洋是白色的 更
  • 如何使用增量值向 Pyspark 中的 DataFrame 添加列?

    我有一个名为 df 的 DataFrame 如下所示 Atr1 Atr2 Atr3 A A A B A A C A A 我想向其中添加一个具有增量值的新列并获取以下更新的 DataFrame Atr1 Atr2 Atr3
  • 在 Django 1.9 中使用信号

    在 Django 1 8 中 我能够使用信号执行以下操作 一切顺利 init py from signals import 信号 py receiver pre save sender Comment def process hashtag
  • python中不规则点之间的坐标列表

    想象一下 我们为 x 和 y 随机选择两个介于 0 到 100 之间的点 例如 95 7 35 6 现在使用简单的 pygame draw line 函数 我们可以轻松地在这些点之间绘制一条没有任何间隙的线 我的问题是 我们如何找到两点之间
  • 传递宏作为参数 jinja dbt

    Today date milliseconds 是我在项目中的宏 如何将此宏重定向为参数 以便默认情况下我可以在 yml 中编写另一个宏 test valid date model column name exclude condition
  • 了解 Tensorflow 中的 while 循环

    我正在使用用于 Tensorflow 的 Python API https www tensorflow org api docs python 我正在努力实施罗森布罗克函数 https www sfu ca ssurjano rosen
  • NumPy 中 exp(-x^2) 的快速傅立叶变换

    I have to calculate numerically the 2nd derivative of a Gaussian function I ve read every question on this topic here bu
  • 如何在Python中设置像素的alpha值

    我正在尝试编辑image https drive google com file d 0B8JcwRV HVk0OURrcTFJczhmV2RlUGdMOG0ybldYUVRoamtF view usp sharing以一种将所有白色像素转
  • python字符串包含双引号字符

    我的输入字符串由字符组成 包括双引号和单引号 和 B SS JU PQ AD DDSFD ABD E J 但是 当我从文本文件打开上述输入并打印它时 第三行中的双引号 被打印为 xe2 x80 x9d 我的目标是进行简单的字符计数 B 2
  • 保存 Jupyter Notebook,并显示 Plotly Express 小部件

    我有一个 Jupyter 笔记本 python 我使用plotlyexpress 在笔记本中绘图以进行分析 我想与非编码人员共享此笔记本 并让交互式视觉效果仍然可用 但它似乎不起作用 我尝试以下此处提出的建议 https community
  • 安装 confluence-kafka 时“文件名或扩展名太长”?

    我在使用 pip install confluence kafka 安装 confluence kafka 时遇到一些问题 但我收到此错误 文件名或扩展名太长 详细信息如下 Collecting confluent kafka Using
  • Python list.extend() 是保序的吗?

    我想知道扩展函数是否保留两个列表中的顺序 gt gt list 1 2 3 gt gt list extend 4 5 gt gt list 1 2 3 4 5 扩展总是这样工作吗 Yes list extend just extends给

随机推荐

  • 为什么 Linq Cast<> 帮助器不能与隐式转换运算符一起使用?

    在决定重复投票之前 请阅读全文 我有一个实现的类型implicit cast运算符转换为另一种类型 class A private B b public static implicit operator B A a return a b c
  • 根据 pandas 中另一列的值创建新列

    我有这个 pandas 数据框 其 代码 列包含顺序分层代码 我的目标是使用每个层次级别代码及其名称创建新列 如下所示 原始数据 Code Name 0 A USA 1 AM Massachusetts 2 AMB Boston 3 AMS
  • 通过不加载主题和插件使 WordPress WP-API 更快

    我想更快地向 WordPress API 发出请求 我的API是在插件中实现的 使用register rest route来注册我的路线 然而 由于这是一个插件 所以所有内容都已加载 子主题和主题 并且基本上对该 API 的查询需要半秒 因
  • SQLite 查询中的 JavaScript for 循环

    我创建了一个函数 它将从我的数据库返回字符串 path function getAudio mid cb mid is an array containing the id to some multimedia files for i 0
  • 在 VSTS 托管代理上使用 PowerShellGet

    我在构建过程中使用 Visual Studio Team Services VSTS 托管的构建代理 我的构建主要依赖于 PowerShell 步骤 该步骤调用我在 git 中的脚本 在此脚本中 我想使用 PowerShellGet 管理
  • 关闭文件而不退出 VIM 应用程序?

    我用 e and w用于编辑和写入文件的命令 我不确定是否有 close 命令可以在不离开Vim的情况下关闭当前文件 I know that the q command can be used to close a file but if
  • 如何在嵌入式 Jetty 上设置 SSL?

    我已经嵌入了 jetty 7 x 基本上只是创建一个 SelectChannelConnector 来侦听端口 80 和 WebAppContext 来部署单个 WAR 目录 我现在需要添加 SSL 所有密钥库内容都已完成 我本想只添加一个
  • 如何覆盖 SyliusCoreBundle 模型用户

    我尝试在模型用户 SyliusCoreBundle Model User 中添加一个新字段 电话 避免接触SyliusCoreBundle 我创建了一个新的捆绑包 ShopBundle 它位于其他 sylius 捆绑包旁边以覆盖基本用户类
  • ASP.NET 中的 Twitter API 集成

    目前我正在使用剃刀使用MVC4 5 我尝试将 Twitter API 集成到我的应用程序中 但没有成功 您能帮助我如何将 Twitter API 集成到我的应用程序中吗 我已经创建了 twitter API 详细信息如下 OAuth 设置
  • Swift 4 JSON Codable - 返回的值有时是一个对象,其他是一个数组

    我从 API 获取的数据返回单个对象 但当有多个对象时 它会返回同一键中的数组 对于我正在使用的当前模型 结构 当数组出现时解码会失败 这些结果是随机排序的 这意味着我不知道何时会收到对象或数组 有没有办法创建一个模型 考虑到这一事实 并可
  • 数据库设计 - 是否应该避免一对一关系? [复制]

    这个问题在这里已经有答案了 可能的重复 是否存在使用数据库 1 1 关系有意义的时候 https stackoverflow com questions 517417 is there ever a time where using a d
  • SourceTree - 变基 - 合并期间的错误

    我正在尝试做一些简单的事情 例如编辑先前提交的提交消息 检查git status I have nothing to commit working directory clean 然后 我单击提交并执行 SourceTree gt Repo
  • iOS UIPageViewController 页面控制不同步

    每当我滑动页面控制器并点击UIPageControl同时在底部向相反方向滑动 当前显示的页面和pageControl中的页码会不同步 有没有人遇到过这个奇怪的问题并解决了 如果您需要任何其他信息 请告诉我 刚刚查看了文档UIPageCont
  • 如何更新 Laravel 4 中现有的 Eloquent 关系?

    我正在尝试更新 Laravel 中一对多关系的关系 不幸的是我找不到任何相关文档 谁能帮我 这是我到目前为止所拥有的 class Account extends Eloquent public function users return t
  • scanf 的四边形和参数类型

    我用
  • 平均日期数组计算

    我想得到以下日期的平均值 我考虑过将所有数据转换为秒 然后对它们进行平均 但可能有更好的方法来做到这一点 date 2016 02 23 09 36 26 2016 02 24 10 00 32 2016 02 24 11 28 22 20
  • java.lang.NoSuchFieldException:使用反射时

    public static
  • 无法从 scm 存储库获取分支信息

    我在构建 Maven 项目时遇到以下错误 有解决这个问题的想法吗 ERROR Failed to execute goal org codehaus mojo buildnumber maven plugin 1 4 create defa
  • Symfony2,奏鸣曲:折叠组

    我一直在尝试做一些相对简单的事情 但这不起作用 我希望能够折叠奏鸣曲中的组以增强用户的体验 gt with MyGroup array collapsed gt true add MyField gt end 这是根据奏鸣曲改编的文档 ht
  • python 列表理解 double for

    vec 1 2 3 4 5 6 7 8 9 print num for elem in vec for num in elem lt this gt gt gt 1 2 3 4 5 6 7 8 9 这是在骗我 我知道 elem 是列表中的列