使用具有多个参数的地图

2023-11-30

蟒蛇的map可以接受多个可迭代对象,当可调用对象可以接受相同数量的输入参数时使用。如果输入可迭代的长度相同,则其行为类似于传递压缩参数的列表理解,例如:

>>> iterables = 'spam', 'eggs'
>>> map(max, *iterables)
['s', 'p', 'g', 's']
>>> [max(*a) for a in zip(*iterables)]
['s', 'p', 'g', 's']

当输入参数的长度不同时,它会变得很奇怪 - Python 2 (docs) 垫与None,但是 Python 3 (docs) 截断为最短迭代。

>>> map(max, 'spam', 'potato')  # 2.x
['s', 'p', 't', 'm', 't', 'o']
>>> list(map(max, 'spam', 'potato'))  # 3.x
['s', 'p', 't', 'm']

为什么存在此功能,需要或有用的典型案例是什么?我对功能风格了解不多,我是否会错过一些强大的优势map与多个参数相关的? 3.x 中 API 更改的理由是什么?


关于why mappython3 中的截断,这只是因为 python3 的map实际上是itertools.imap。文档说:

Like map()但当最短的迭代用完时停止 而不是填写None对于较短的可迭代对象。的原因 区别在于无限迭代器参数通常是 错误为map()(因为输出已完全评估)但是 代表了一种常见且有用的提供论据的方式imap().

截断允许你做类似的事情map(func, itertools.repeat(5), [1,2,3])并无忧无虑地迭代结果。与旧的map那将是一个无限循环。

python3 中最重要的变化之一是许多内置函数现在返回生成器而不是lists,包括map and zip。这种“增加的懒惰”改变了这些函数的使用方式,从而改变了行为。

至于为什么人们会使用 python2 的多重迭代来map我不知道。当然,这是类似(在 python3 中)的快捷方式:

list(itertools.starmap(function, itertools.zip_longest(*iterables)))

这可能有一些极端情况的用法,但我从未见过它被使用。 可能大多数人根本不知道map接受一系列可迭代对象。 因此,据我所知,使用多个参数并不会产生任何超能力。

至于为什么map是在语言中,那是因为map早在列表推导式出现之前就已经存在了。在列表推导之前,它对于构建列表非常有用。 它没有被删除是为了向后兼容,而且因为很多人实际上喜欢它, 虽然吉多did想要删除它.

想要了解更多关于历史的信息map, filter and reduce和其他功能方面,请阅读:Python 的历史:Python“函数式”特性的起源

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

使用具有多个参数的地图 的相关文章

随机推荐

  • 在 APL 中创建单位矩阵最惯用的方法

    根据罗塞塔代码 在 APL 中有两种创建单位矩阵的惯用方法 1 ID 2 ID 1 0 2 如何运作 为什么这比 1 更好 后者使用 APL 中惯用的方法外积 1 0创建一个向量 其中包含1其次是 零 所以 这个向量的长度是 1 涵盖 by
  • 如何克隆微软图表控件?

    克隆 Microsoft Chart Control 对象的推荐方法是什么 因为是第三方库 所以无法使用解决方案这里提到因为我无法将对象标记为可序列化 最好 我不想引入任何第三方控件来克隆图表 除非如果没有第三方控件绝对不可能这样做 您不需
  • 将 Fetch API 与 Promise.all 一起使用

    我的目标是从两个 URL 获取数据 并仅在两个 URL 均成功返回时才执行操作 另一方面 如果其中任何一个失败 我想返回错误 我已经尝试了我的代码并设法获得了预期的效果 我的问题是 是否有更有效 更简洁的方法来实现相同的功能 辅助函数 le
  • Fparsec 递归语法抛出 StackOverflowException

    我有这个代码 type Exprs Val of float Mult of Exprs Exprs Plus of Exprs Exprs let pexpr exprRef createParserForwardedToRef
  • 使用 np.linspace() 绘制离散分布

    我正在尝试使用 matplotlib 绘制一个简单的离散分布 如果 1 如果0 如果 1 我该如何开始x np linspace 1 2 到目前为止我尝试过的是 def mapDiscProb x if np any x lt 0 retu
  • 如何使用 iconv 将存储为 LATIN1 ( sql ) 的西里尔字母转换为真正的 UTF8 西里尔字母?

    我有一个 SQL 转储文件 其中包含错误存储的西里尔俄语 WINDOWS 1251 文本 例如 应该正确显示为 过去我已经成功转换了sql文件 但是内存在我所做的事情和顺序上失败了 从逻辑上讲 这是有道理的 因为它存储在 LATIN1 中
  • svmtrain 和 fitcsvm 之间的区别

    我有一组由 35 个特征列表组成的数据 我注意到当我将数据提供给svmtrain我收到消息 no convergence achieved within maximum number of iterations 比 当我增加迭代次数时 Ma
  • 以编程方式从现有 WooCommerce 订单更改运输方式

    我的客户通过我的 woocommerce 网站购买订阅 他们每个月都会收到产品 但有时他们想改变运输方式 我没有找到通过 php 执行此操作的文档 我可以改变其中的值post meta woocommerce order items and
  • 如何检索网络适配器绑定协议的列表? (在 PowerShell 或任何语言中)

    因此 在 Windows UI 中 如果右键单击网络适配器 您会看到一个属性页 其中有一个标记为 此连接使用以下项目 的部分 在此属性页中是一个项目列表 旁边有一个复选框 例如 Microsoft 网络客户端 QoS 数据包调度程序 IP
  • 从 Rails 导出 CSV 数据

    我正在努力从 Rails 导出 CSV 数据 我正在按照这里的教程进行操作 http railscasts com episodes 362 exporting csv and excel view asciicast 在我的控制器中我有
  • Gradle构建错误将字节码转换为dex时出错:原因:com.android.dex.DexException:多个dex文件定义Landroid/arch/lifecycle/liveData$1

    从过去 3 天开始 我收到此错误 并已尝试了所有可能的方法 谁能帮我纠正一下 我正在使用 Android 3 0 我的 sdk 和 Google Play 服务已更新 并且我已添加multiDexEnabled true我的代码 并且还尝试
  • 如何在 swift 中使用模态视图?

    When adding an account to Mail in preferences you get a modal view like this 我的问题是 如何以编程方式复制这个 换句话说 如何在呈现视图上显示模态 UIView
  • Mybatis resulttypehashmap 的 null 值

  • 查找两个单词是否是彼此的字谜

    我正在寻找一种方法来查找两个字符串是否是彼此的字谜 Ex string1 abcde string2 abced Ans true Ex string1 abcde string2 abcfed Ans false 我想出的解决方案是对两个
  • 如果付款失败,PayPal Standard 是否会自动重试向客户收费?

    我必须将 PayPal 标准付款集成到我的 Saas 中才能按月订阅 我在 PayPal 文档中找到了一些有关使用 API 的提示 但这不是我的情况 如果几个月后由于客户没有钱而付款失败 它是否会在接下来的几天内自动重试向客户收费 还是我应
  • 如何理解读内存屏障和易失性

    有些语言提供了volatile修饰符被描述为在读取支持变量的内存之前执行 读内存屏障 读内存屏障通常被描述为一种确保 CPU 在执行屏障之后请求的读取之前已执行屏障之前请求的读取的方法 然而 使用这个定义 似乎仍然可以读取过时的值 换句话说
  • Visual Studio 在 Windows 7 上将 WINVER/_WIN32_WINNT 设置为 Windows 8?

    我正在使用 Visual Studio 2012 在 Windows 7 x64 上执行一些测试 看起来 Microsoft 的工具链正在设置 WIN32 WINNT to 0x602 WIN32 WINNT WIN8 运行我们的测试程序结
  • AdMob 填充率 = 0

    我正在使用 admob 来开发前几天刚刚推出的应用程序 一开始没有任何下载 但是通过我现在使用的广告活动 我昨天收到了 140 个请求 截至目前 已经收到 44 个请求 并且还在增加中 但在旧的 admob 网站上 它仍然显示它未激活 因为
  • 我需要查看上传的图片的正确路径是什么?

    在我的网络应用程序中 我的一个页面正在将照片上传到路径 usr local rac picture name goes here 照片上传正常 但我需要在另一个页面中访问它 当我尝试从 JSP 访问它时 它不会显示 我猜我的照片路径不正确
  • 使用具有多个参数的地图

    蟒蛇的map可以接受多个可迭代对象 当可调用对象可以接受相同数量的输入参数时使用 如果输入可迭代的长度相同 则其行为类似于传递压缩参数的列表理解 例如 gt gt gt iterables spam eggs gt gt gt map ma