python - 如果我使用函数范式对序列进行排序,那么制作副本不是浪费吗?

标签 python functional-programming

目标:以函数方式对序列进行排序,而不使用内置的 sorted(..) 函数。

def my_sorted(seq):
    """returns an iterator"""
    pass

动机:在 FP 方式中,我受到限制:

  • 永远不要改变seq(可以是迭代器或实现的列表)
  • 暗示,没有就地排序。

问题 1 由于我无法改变 seq,因此我需要维护一个单独的可变数据结构来存储排序序列。与就地 list.sort() 相比,这似乎很浪费。其他函数式编程语言如何处理这个问题?

问题 2 如果我返回一个可变序列,在函数范式中可以吗?

最佳答案

当然,排序不能完全是惰性的(输入的最后一个元素可能是输出的第一个元素),但是您可以实现计算惰性排序,在读取整个序列后,仅根据请求逐个元素生成精确排序的输出。您还可以延迟读取输入,直到至少请求一个输出,这样排序和忽略结果将不需要计算。

对于这种计算惰性的方法,我所知道的最佳候选者是堆排序算法(您只需预先执行堆构建步骤)。

关于python - 如果我使用函数范式对序列进行排序,那么制作副本不是浪费吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700026/

相关文章:

javascript - 具有多个谓词的过滤器,优雅的函数式方法

python - 获取多级继承类的父类的父类的属性

python - 如何将查询中设置的page_size设置为分页元数据djangorest框架

types - 当 OCaml 变量以 `#` 开头时,这意味着什么? (哈希符号/磅符号)?

python - 在输入迭代器的开头和结尾保留占位符的生成器完好无损

javascript - 函数式编程 - 递增计数器的简单 For 循环

scala - Scala 中类似 Haskell 的类型约束 trait 实现(?)

python - 如何在 SSL 下制作网站的一部分而其余部分不?

python - imap 不允许使用 gmail 文件夹 - mail.select 'inbox' 以外的文件夹

python - 从子目录调用 python 脚本(使用子进程调用 grep)导致错误