映射列表,除了最后一个列表元素

2023-11-26

如何最好地映射列表中除最后一个列表元素之外的所有元素?

假设我们有一个清单let l = [1,2,3,4]并想要得到[2,3,4,4].

我确实有一个解决方案,但感觉不像“功能”方式(在 ghci 中):

let l = [1,2,3,4]
let len = toIntegral $ length l -- to avoid a type mismatch Integer <-> Int
let l1 = zip l [1..]
let l2 = map (\(x,y) -> if y < len then (x + 1,y) else (x,y)) l1
let l3 = map (fst) l2

不太好......我希望有更好的方法!由于我是函数式编程的新手,所以我不知道从哪里开始寻找它。


重新写一下就可以了map但当只有一个元素时,请考虑一种特殊情况:

mapBut1 :: (a -> a) -> [a] -> [a]
mapBut1 f [] = []
mapBut1 f [x] = [x]
mapBut1 f (x:xs) = f x : mapBut1 f xs

现在,即使对于无限列表,这也适用,它比计算长度要快得多,并且更具可读性。请注意,这确实限制了您的函数的类型a -> a代替a -> b.

或者,你可以这样做

mapBut1 f (x:y:xs) = f x : mapBut1 f (y:xs)
mapBut1 f other = other

它们是等效的定义,但后者使用的模式匹配少 1 个。不过,我更喜欢前者,因为正在处理的案件更加明显。

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

映射列表,除了最后一个列表元素 的相关文章

  • SwiftUI 从一个列表拖动到另一个列表

    我正在尝试在列表之间拖放 我尝试过的 我找到了一个在 UIKIt 中执行此操作并使用 UIViewControllerRepresentable 的解决方案 但这不是我想要的 另一个解决方案是在列表上使用 onDrag 但这在 iPad 上
  • Python 比编译的 Haskell 更快?

    我有一个用 Python 和 Haskell 编写的简单脚本 它读取包含 1 000 000 个换行符分隔的整数的文件 将该文件解析为整数列表 对其进行快速排序 然后将其写入已排序的不同文件中 该文件与未排序的文件具有相同的格式 简单的 这
  • 如何让 esqueleto 为我生成 SQL 字符串?

    我怎样才能让esqueleto从a生成一个SQL字符串from陈述 的文档toRawSql说 你可以打开持久的查询日志记录 我尝试了所有可能的形式MonadLogger我可以理解 但它从未打印任何 SQL 同一文档还说 手动使用此功能 是可
  • 打乱列表并返回副本

    我想对数组进行洗牌 但我找到的只是类似的方法random shuffle x from 在 Python 中随机化字符串列表的最佳方法 https stackoverflow com questions 1022141 best way t
  • List 或其他类型上的 string.Join

    我想将整数数组或列表转换为逗号分隔的字符串 如下所示 string myFunction List
  • Haskell数据类型转换问题

    我目前正在学习 Haskell 并且一直在编写一些非常简单的程序来练习 我的程序之一是 import System IO main do putStrLn Give me year y lt getLine let res show cal
  • 在 Archlinux 上使用 Vim 作为 Haskell 的 IDE 目前情况如何?

    如果可行的话 我的目标是通过 YouCompleteMe 在 Vim 中完成 Haskell 的命令 在这方面 正如您在下面看到的 我还没有找到关于如何让它发挥作用的共识 相关评论的最新评论YouCompleteMe 上的问题 https
  • 我可以在 Java 8 中使用 Clojure 函数作为 Lambda 函数吗?

    我在 Clojure 中使用了许多库来生成符合 Clojure lang IFN https github com clojure clojure blob master src jvm clojure lang IFn java 界面 它
  • 将列表中的所有其他元素相乘

    我有一个清单 比方说 list 6 2 6 2 6 2 6 我希望它创建一个新列表 其中每个其他元素乘以 2 每个其他元素乘以 1 保持不变 结果应该是 12 2 12 2 12 2 12 def multi res 0 for i in
  • Haskell 为替代的 Either 数据类型定义 Functor 实例

    通过 Typeclassopedia 获得一些使用类型类的路由 想要替代Either的一个实例Functor 但即使检查定义Either作为一个例子Functor总是给我带来麻烦 有这个 但不会编译 data Alt a b Success
  • 向前和向后迭代

    我们有一个双端结构列表 例如LinkedList 我需要向前和向后迭代元素 例如 向前 4 次 然后向后 2 次 然后向前 5 次 在 C 中它将是 iter iter iter 在 Rust 中 我只看到 next and rev 这很不
  • 获取所有ios应用程序的全局列表[重复]

    这个问题在这里已经有答案了 我想对苹果应用商店进行一些全球统计 一个瓶颈是至少获取所有当前活动应用程序的 ID 这 9 位数字 有谁知道如何获取 iOS 应用商店中当前活动应用程序的所有 id 的完整列表 更好的是特定类别的所有 ID 例如
  • 在 python 中创建默认列表

    我正在尝试创建一个非常有用的等效列表collections defaultdict http docs python org library collections html collections defaultdict 下面的设计效果很
  • IntSummaryStatistics的summaryStatistics方法

    为什么空 IntStream 上的 summaryStatistics 方法返回整数的最大和最小值作为流中存在的最大和最小 int 值 IntStream intStream IntStream of IntSummaryStatistic
  • 列出推导式和条件?

    我想看看是否可以使用列表理解使这段代码变得更好 假设我有以下列表 a list HELLO FOO FO1BAR ROOBAR SHOEBAR regex list lambda x re search r FOO x re IGNOREC
  • 函数式语言与语言实现的角度有何不同

    出现了全新的 函数式编程 范式 与过程式编程相比 它需要彻底改变思维模式 它使用高阶函数 纯度 单子等 我们通常在命令式和面向对象语言中不会看到这些 我的问题是如何执行这些语言与命令式或面向对象语言的不同之处在于 例如内存管理或指针等内部结
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • Vaadin:在表中显示列表

    我需要显示表中列表中包含的所有值 例如 class Person String name String age List
  • 对 Python 列表元素进行分组

    我有一个 python 列表 如下所示 my list 25 1 0 65 25 3 0 63 25 2 0 62 50 3 0 65 50 2 0 63 50 1 0 62 我想根据以下规则对它们进行排序 1 gt 0 65 0 62 l
  • 需要澄清令人困惑的 Http4s 消息类型 `Response[F]` / `Request[F]`

    我很难理解为什么Request and Response参数化为F 类似的东西是猫效应数据类型资源 从文档中 https typelevel org cats effect docs std resource https typelevel

随机推荐

  • Laravel 4 虚拟主机和 mod 重写设置

    我已经尝试了几个小时来安装 Laravel 4 并使虚拟主机和路由正常工作 但到目前为止我一直不走运 我提到我正在这样做Windows 7的机器和WAMP 我将描述我已经做过的事情 我已经启用了 rewrite module 使用以下内容更
  • 平台模块之间是否允许循环?

    这是模块声明java rmi module module java rmi requires java base requires java logging exports java rmi activation exports com s
  • 反射类获取任何对象的所有属性

    我需要创建一个函数来获取对象 包括子对象 的所有属性 这是为了我的错误日志记录功能 现在我的代码总是返回 0 个属性 请让我知道我做错了什么 谢谢 public static string GetAllProperiesOfObject o
  • 沙盒环境中 FinderSync 扩展的读写访问权限

    场景 用户右键单击 Finder 中的目录并找到自定义菜单项 单击该项目将告诉我的应用程序打开一个窗口 用户可以在其中完成工作 完成后 需要将文件写入他通过右键单击选择的文件夹 问题 我现在一切都开始工作了 除了最后一部分 扩展程序无法写入
  • Django:如何在通用创建视图上设置隐藏字段?

    我正在运行 Django 1 6 x 为了扩展我的用户 我添加了另一个存储数据的模型 class UserProfile models Model user models ForeignKey User height models Inte
  • 如何在 recyclerview viewholder 中处理许多不同的视图类型

    如果我有 50 种视图怎么办 我的适配器中应该有 50 个静态内部类吗 根据这个答案 yes 我的第一个想法是将每个视图持有者内部类移动到一个单独的公共类中 但它们必须是静态的 那么将每个都封装成一个公共类 使内部类静态 有更好的选择吗 编
  • 使用一个 NPM 命令启动 React-create-app 和 Electron.js

    我有简单的定制入门包react create app and Electron js 我已添加到 package json 文件 scripts electron electron start cross env BROWSER none
  • Rails:使用 Gmail API 发送电子邮件,附件仅返回编码文件而不返回

    我正在尝试使用 gmail API 发送电子邮件 我的 Ruby 代码如下所示 无需附件即可正常运行 client google client user id token Token find by user id user id acce
  • Java HashMap 性能优化/替代方案

    我想创建一个大的 HashMap 但put 性能不够好 有任何想法吗 欢迎其他数据结构建议 但我需要 Java Map 的查找功能 map get key 就我而言 我想创建一个包含 2600 万个条目的地图 使用标准 Java HashM
  • 如何在 C++ 中从文本文件的开头删除字符“”?

    我正在尝试读取一个文本文件 对于每个单词 我会将它们放入二叉搜索树的节点中 但是 第一个字符始终读作 第一个单词 例如 如果我的第一个单词是 This 那么插入到我的节点中的第一个单词是 This 我一直在论坛上寻找修复它的解决方案 有一篇
  • 可见性:隐藏和显示:无之间的性能差异

    我想简化 jQuery Backbone js Web 应用程序中的事情 其中一种简化是我的菜单和对话框小部件的行为 之前我在开始时创建了菜单的 div 框并使用隐藏它们display none opacity 0 当我需要菜单时 我将其样
  • Django 是同步还是异步?

    Django 是同步还是异步 我想知道 Django 框架是同步的还是异步的 我听说过面试问题 他们询问你正在使用的框架是同步还是异步 所以我想知道它的含义同步和异步在网络开发方面 Django 本身是同步的 每个 HTTP 请求都将完全同
  • 如何处理const对象中非常量引用成员的初始化?

    假设你有课 class C int i public C int v i v void method const this method does not change i void method this method changes i
  • 让音乐应用程序在后台、iOS 和 Android 中保持活力?

    我正在使用 Flutter 构建一个音乐播放应用程序 它帮助我作为一个开发人员为两个平台构建一次应用程序 然而 我在这两个平台上分别遇到了一些问题 尽管我已经克服了其中一些障碍 但我就是无法找出一个主要的错误 问题 这些错误 问题只会使制作
  • 使用Spring Boot处理MultipartException并显示错误页面

    我使用 Spring Boot 设置了一个非常简单的文件上传 我想知道是否有一种简单的方法可以在超过最大文件大小时显示错误页面 我上传了一个非常简单的示例来说明我想要实现的目标在 github 上 基本上 这个想法是在全局 Spring 异
  • 使用 Google Webfonts 时 Outlook 中的 CSS 字体堆栈替换问题

    在 HTML 电子邮件中使用 Google Webfonts 时 我在 Outlook 2007 2010 等 中遇到了字体替换问题 这些问题在合并 webfonts 之前不会发生 它会忽略字体堆栈并直接转到 Times 尽管使用内联后备字
  • Android 10 中访问 /proc/net/arp ARP 表的权限被拒绝

    使用 ARP 表 我们可以访问 Android 9 及更早版本中热点连接设备的 IP 和 MAC 现在 从 Android 10 开始 同样的权限被拒绝 请建议我如何在 Android 10 中访问已连接设备的 IP 和 MAC 地址 下面
  • Scipy 的优化曲线拟合限制

    有什么方法可以为 Scipy 的优化曲线拟合提供限制吗 我的例子 def optimized formula x m 1 m 2 y 1 y 2 ratio 2 return log x 0 m 1 m 2 1 x 1 max age 1
  • 启用 Log4J2 + Apache HttpClient 的调试日志记录

    我试图激活我的 Apache HttpClient 的调试日志记录 但无法使其工作 根本没有获得与 HttpClient 相关的日志输出 这是我目前使用的 log4j2 配置
  • 映射列表,除了最后一个列表元素

    如何最好地映射列表中除最后一个列表元素之外的所有元素 假设我们有一个清单let l 1 2 3 4 并想要得到 2 3 4 4 我确实有一个解决方案 但感觉不像 功能 方式 在 ghci 中 let l 1 2 3 4 let len to