我可以用 sum() 连接列表吗?

2023-12-30

使用Pythonic吗sum()用于列表串联?

>>> sum(([n]*n for n in range(1,5)),[])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

不,不是,实际上是Shlemiel 画家算法 http://en.wikichip.org/wiki/schlemiel_the_painter%27s_algorithm。因为每次它想要连接一个新列表时,它都必须从头开始遍历整个列表。 (有关更多信息,请阅读 Joel 的这篇文章:http://www.joelonsoftware.com/articles/fog0000000319.html http://www.joelonsoftware.com/articles/fog0000000319.html)

最Pythonic的方法是使用列表理解:

In [28]: [t for n in range(1,5) for t in [n]*n ]
Out[28]: [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

Or itertools.chain:

In [29]: from itertools import chain

In [32]: list(chain.from_iterable([n]*n for n in range(1,5)))
Out[32]: [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

或者作为纯粹的基于生成器的方法,您可以使用repeat而不是将列表相乘:

In [33]: from itertools import chain, repeat

# In python2.X use xrange instead of range
In [35]: list(chain.from_iterable(repeat(n, n) for n in range(1,5)))
Out[35]: [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

或者,如果您对 numpy 感兴趣,或者您想要一种超快速的方法,这里就是:

In [46]: import numpy as np
In [46]: np.repeat(np.arange(1, 5), np.arange(1, 5))
Out[46]: array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以用 sum() 连接列表吗? 的相关文章

随机推荐

  • 从 byte[] 返回 FileResult

    我正在开发 ASP NET Core API API 是数据库驱动的 我将图像存储在数据库中 我的ArtistImage cs实体看起来像这样 艺术家图像 cs public class ArtistImage public int Id
  • 在绘图标题中使用多种字体大小 (Python)

    我有一个图表标题 它使用换行符跨越多行 我希望第一行之后的所有内容都采用较小的字体 实际上是副标题 但无法找到实现此目的的方法 在这里看不到任何类似的问题 import plotly graph objs as go data layout
  • Gatsby 在使用带有 '@use 'sass:color' 的 Sass 文件后失败

    我正在建立一个盖茨比项目gatsby plugin sass my gatsby config js file module exports plugins gatsby plugin resolve src gatsby plugin s
  • 是否可以使 bash shell 脚本与另一个命令行程序交互?

    我在运行 bash shell 的 Linux 终端中使用交互式命令行程序 我有一个明确的命令序列输入到 shell 程序中 程序将其输出写入标准输出 其中一个命令是 保存 命令 它将前一个运行的命令的输出写入磁盘的文件中 一个典型的循环是
  • if else 在列表理解中[重复]

    这个问题在这里已经有答案了 我有一个清单l l 22 13 45 50 98 69 43 44 1 对于45以上的数字 我想加1 对于小于它的数字 5 I tried x 1 for x in l if x gt 45 else x 5 但
  • Jupyter 的 Octave 内核无法在 Windows 10 上运行

    我尝试使用 pip 为 jupyter 安装八度内核 如此处建议的https github com calysto octave kernel https github com calysto octave kernel 但我在创建新笔记本
  • 根据 Firebase 中的子项过滤产品

    我试图弄清楚如何根据 Firebase 中的子子节点来过滤产品 我的设置如下 products product1 author 12345 title Awesome description more awesome product2 au
  • 验证 RSA 签名 iOS

    在我的静态库中 我有一个许可证文件 我想确保它是由我自己生成的 并且没有被更改 所以我的想法是使用我读过的 RSA 签名 我在网上查了一下 这就是我想到的 第一 使用我找到的信息生成私钥和自签名证书here https github com
  • 在 Sybase 过程中从表中选择 TOP 1 * 失败

    我尝试在不使用 RowCount 函数的情况下从 Sybase 表中仅获取一条记录 即使 WHERE 条件 返回多个结果 SELECT TOP 1 EMPLOYEE NAME FROM EMPLOYEES WHERE EMPLOYEEID
  • 无效的堆地址和致命信号 11

    我的应用程序经常会崩溃 我的日志将显示 ABORTING INVALID HEAP ADDRESS IN dlfree Fatal signal 11 SIGSEGV at 0xdeadbaad code 1 有时code 2 但总是Fat
  • PUT/同步所需的 s3cmd S3 权限

    在迁移到 AWS EC2 时 我有充分的理由希望限制实例的用户权限 实例需要做的一件事是访问 S3 上的文件并在那里写入文件 然而 如果不向该用户授予所有权限 我找不到任何方法来实现此目的 s3cmd 允许我在我授予策略权限的 s3 存储桶
  • 如何将字符串字段句子拆分为单词并将它们插入到具有相同键 id 的新表中?

    我有一个名为 Pads 的表 其中有一个名为 keywords 的字段 它有一个单词列表 也称为句子 e g Pad ID 1 Keywords red brown green ID 2 keywords green orange blue
  • OpenGL ES:围绕自身旋转 3d 模型

    我正在 iPhone 上使用 OpenGL ES 并尝试通过用手指平移来旋转模型 我发现了开源应用程序 Molecules 可以让你做到这一点 我正在查看该代码 但是当涉及到旋转我的模型时 我只能围绕空间中远处的一个点旋转它 就像它一样 作
  • 如何使用for循环画不同角度的圆线

    我使用下面的代码在圆圈中画一条线 现在我想以相同的间距以不同的角度绘制12条线 并且线应该接触到圆圈
  • 跨平台 Flash Player 嵌入

    我需要以跨平台方式 至少 Windows 和 Mac OSX 将 Flash 播放器嵌入本机应用程序 C 中 我需要允许 Flash gui 回调本机应用程序来执行 Flash 通常无法执行的操作 例如写入文件系统 与设备通信 加载本机图像
  • Jquery 手风琴关闭然后打开

    我使用 jquery 手风琴插件在页面上设置了多个手风琴 这样我就可以实现全部展开和折叠所有功能 每个 ID 元素都是它自己的手风琴 下面的代码可以将它们全部关闭 无论哪些元素已经打开 contact address email sales
  • Xcode 14 - 无法在此文件中预览,无法连接到 iPhone 14 | FailedToConnectToDTServiceHubError:无法连接到 iPhone 14

    在探索 swiftUI 并在 Xcode 中创建我的第一个 swiftUI 应用程序时 它抛出预览错误 提示 无法在此文件中预览 无法连接到 设备名称 虽然它在模拟器中运行良好 为了排除故障 我已经尝试了所有基本技巧 例如 删除派生数据 取
  • 谷歌地球热图

    有没有办法在谷歌地球中创建热图 以便具有较高值 某些指定参数 例如人口 的区域显示为热点 这似乎是可能的 例如 看一下这几个链接 免责声明 我没有尝试过这些 HeatMapAPI com http www heatmapapi com An
  • 部分合并两个数据集并在R中填充NA

    我有两个数据集 a 包含数千个不同天气事件观测结果的原始数据集 STATE EVTYPE 1 AL WINTER STORM 2 AL TORNADO 3 AL TSTM WIND 4 AL TSTM WIND 5 AL TSTM WIND
  • 我可以用 sum() 连接列表吗?

    使用Pythonic吗sum 用于列表串联 gt gt gt sum n n for n in range 1 5 1 2 2 3 3 3 4 4 4 4 不 不是 实际上是Shlemiel 画家算法 http en wikichip or