跳过正文
  1. Lumesh 文档/
  2. 内置模块函数/

Lumesh List 模块

4190 字·9 分钟
目录

List 模块是 Lumesh 中最重要的数据处理模块之一,提供了丰富的列表操作函数,支持函数式编程范式。所有函数都采用不可变设计,返回新的列表而不修改原列表。

功能概览
#

功能类别主要函数用途
打印输出pprint美化打印列表
数学统计max, min, sum, average数值计算和统计
基础操作get, len, insert, rev, flatten基础数据操作
元素访问first, last, at, take, drop获取列表元素
查找操作contains, find, find_last元素查找和定位
修改操作append, prepend, unique, split_at, sort, group, remove_at, remove, set列表结构修改
创建操作concat, from列表创建和组合
函数式操作map, filter, filter_map, reduce, any, all, each高阶函数处理
转换操作join, to_map, items数据格式转换
结构操作transpose, chunk, zip, unzip, foldl, foldr复杂结构变换

打印输出函数
#

pprint <list> - 美化打印列表

  • 参数list (必需): List - 要打印的列表
  • 用途:以表格形式美化显示列表数据

数学统计函数
#

max <num1> <num2> ... | <array> - 获取最大值 min <num1> <num2> ... | <array> - 获取最小值 sum <num1> <num2> ... | <array> - 求和 average <num1> <num2> ... | <array> - 求平均值

  • 参数:可变数量的数字参数或数字数组
  • 返回:相应的计算结果
  • 示例
    • List.max(1, 5, 3) 返回 5
    • List.sum([1, 2, 3, 4]) 返回 10

基础操作函数
#

get <path> <map|list|range> - 使用点号路径从嵌套结构中获取值

  • 参数
    • path (必需): String - 访问路径,支持点号分隔
    • data (必需): Map|List|Range - 要访问的数据结构
  • 返回Any - 指定路径的值
  • 示例List.get("0.name", [{"name": "Alice"}]) 返回 "Alice"

len <list> - 获取列表长度

  • 参数list (必需): List - 要计算长度的列表
  • 返回Integer - 列表的长度

insert <index> <value> <list> - 向列表中插入元素

  • 参数
    • index (必需): Integer - 插入位置的索引
    • value (必需): Any - 要插入的值
    • list (必需): List - 目标列表
  • 返回List - 插入元素后的新列表

rev <list> - 反转列表

  • 参数list (必需): List - 要反转的列表
  • 返回List - 反转后的新列表

flatten <collection> - 展平嵌套列表

  • 参数collection (必需): List - 要展平的嵌套列表
  • 返回List - 展平后的列表

元素访问函数
#

基础访问操作
#

first <list> - 获取列表的第一个元素

  • 参数list (必需): List - 要访问的列表
  • 返回Any - 第一个元素
  • 错误:空列表时抛出错误
  • 示例List.first([1, 2, 3]) 返回 1

last <list> - 获取列表的最后一个元素

  • 参数list (必需): List - 要访问的列表
  • 返回Any - 最后一个元素
  • 错误:空列表时抛出错误
  • 示例List.last([1, 2, 3]) 返回 3

at <index> <list> - 获取指定位置的元素

  • 参数
    • index (必需): Integer - 元素索引,支持负数(从末尾计算)
    • list (必需): List - 要访问的列表
  • 返回Any - 指定位置的元素
  • 示例
    • List.at(1, [1, 2, 3]) 返回 2
    • List.at(-1, [1, 2, 3]) 返回 3(最后一个元素)

列表切片操作
#

take <count> <list> - 获取前 n 个元素

  • 参数
    • count (必需): Integer - 要获取的元素数量
    • list (必需): List - 源列表
  • 返回List - 包含前 n 个元素的新列表
  • 示例List.take(2, [1, 2, 3, 4]) 返回 [1, 2]

drop <count> <list> - 跳过前 n 个元素,返回剩余部分

  • 参数
    • count (必需): Integer - 要跳过的元素数量
    • list (必需): List - 源列表
  • 返回List - 跳过前 n 个元素后的新列表
  • 示例List.drop(2, [1, 2, 3, 4]) 返回 [3, 4]

查找操作函数
#

contains <item> <list> - 检查列表是否包含元素

  • 参数
    • item (必需): Any - 要查找的元素
    • list (必需): List - 源列表
  • 返回Boolean - 包含元素时返回 true

find <item|fn> [start_index] <list> - 查找元素的索引

  • 参数
    • item (必需): Any|Function - 要查找的元素或查找函数
    • start_index (可选): Integer - 开始查找的索引
    • list (必需): List - 源列表
  • 返回Integer|None - 元素索引,未找到时返回 None
  • 示例List.find(3, [1, 2, 3, 4]) 返回 2

find_last <item|fn> [start_index] <list> - 查找元素的最后一个索引

  • 参数
    • item (必需): Any|Function - 要查找的元素或查找函数
    • start_index (可选): Integer - 开始查找的索引
    • list (必需): List - 源列表
  • 返回Integer|None - 元素的最后一个索引,未找到时返回 None

列表修改函数
#

元素添加操作
#

append <element> <list> - 在列表末尾添加元素

  • 参数
    • element (必需): Any - 要添加的元素
    • list (必需): List - 目标列表
  • 返回List - 添加元素后的新列表
  • 示例List.append(4, [1, 2, 3]) 返回 [1, 2, 3, 4]

prepend <element> <list> - 在列表开头添加元素

  • 参数
    • element (必需): Any - 要添加的元素
    • list (必需): List - 目标列表
  • 返回List - 添加元素后的新列表
  • 示例List.prepend(0, [1, 2, 3]) 返回 [0, 1, 2, 3]

列表组合操作
#

unique <list> - 移除重复元素,保持顺序

  • 参数list (必需): List - 要去重的列表
  • 返回List - 去重后的新列表
  • 示例List.unique([1, 2, 2, 3, 1]) 返回 [1, 2, 3]

split_at <index> <list> - 在指定位置分割列表

  • 参数
    • index (必需): Integer - 分割位置
    • list (必需): List - 要分割的列表
  • 返回List[List] - 包含两个子列表的列表 [前半部分, 后半部分]
  • 示例List.split_at(2, [1, 2, 3, 4]) 返回 [[1, 2], [3, 4]]

sort [key_fn|key_list|keys...] <string|list> - 排序列表或字符串

  • 参数
    • key_fn (可选): Function|Lambda - 排序键函数
    • key_list (可选): List[String] - 排序键列表(用于映射列表)
    • keys (可选): String... - 排序键名(用于映射列表)
    • data (必需): List|String - 要排序的数据
  • 返回List - 排序后的新列表

group <key_fn|key> <list> - 按键函数或键名分组

  • 参数
    • key_fn (必需): Function|Lambda|String - 分组键函数或键名
    • list (必需): List - 要分组的列表
  • 返回Map - 分组结果,键为分组标识,值为元素列表

元素移除和修改操作
#

remove_at <index> [count] <list> - 从指定索引移除 n 个元素

  • 参数
    • index (必需): Integer - 开始移除的索引
    • count (可选): Integer - 要移除的元素数量,默认为1
    • list (必需): List - 源列表
  • 返回List - 移除元素后的新列表

remove <item> [all?] <list> - 移除第一个匹配的元素

  • 参数

    • item (必需): Any - 要移除的元素
    • all (可选): Boolean - 是否移除所有匹配的元素
    • list (必需): List - 源列表
  • 返回List - 移除元素后的新列表

    set <index> <value> <list> - 设置指定索引处的元素

    • 参数
      • index (必需): Integer - 要设置的索引位置
      • value (必需): Any - 新的元素值
      • list (必需): List - 源列表
    • 返回List - 设置元素后的新列表

    创建操作
    #

    concat <list1|item1> <list2|item2> ... - 连接多个列表或元素

    • 参数items (可变): List|Any... - 要连接的列表或元素
    • 返回List - 连接后的新列表
    • 示例List.concat([1, 2], [3, 4], 5) 返回 [1, 2, 3, 4, 5]

    from <range|item...> - 从范围或元素创建列表

    • 参数range|item (可变): Range|Any... - 范围或元素列表
    • 返回List - 新创建的列表
    • 示例
      • List.from(1..3) 返回 [1, 2, 3]
      • List.from(1, 2, 3) 返回 [1, 2, 3]

    函数式编程操作
    #

    映射和过滤
    #

    map <fn> <list> - 对每个元素应用函数

    • 参数
      • fn (必需): Function|Lambda - 要应用的函数
      • list (必需): List - 源列表
    • 返回List - 应用函数后的新列表
    • 示例List.map((x -> x * 2), [1, 2, 3]) 返回 [2, 4, 6]

    filter <fn> <list> - 按条件过滤元素

    • 参数
      • fn (必需): Function|Lambda|Expression - 过滤条件
      • list (必需): List - 源列表
    • 返回List - 符合条件的元素组成的新列表
    • 特殊变量
      • LINENO - 当前元素索引
      • LINES - 列表总长度
    • 示例List.filter((x -> x > 2), [1, 2, 3, 4]) 返回 [3, 4]

    filter_map <fn> <list> - 过滤和映射一步完成

    • 参数
      • fn (必需): Function|Lambda - 转换函数,返回 None 表示过滤掉
      • list (必需): List - 源列表
    • 返回List - 转换并过滤后的新列表

    聚合操作
    #

    reduce <fn> <init> <list> - 使用累加器函数归约列表

    • 参数
      • fn (必需): Function|Lambda - 累加器函数,接受 (累加值, 当前元素)
      • init (必需): Any - 初始累加值
      • list (必需): List - 源列表
    • 返回Any - 最终累加结果
    • 示例List.reduce((acc, x) -> acc + x, 0, [1, 2, 3]) 返回 6

    any <fn> <list> - 测试是否有元素通过条件

    • 参数
      • fn (必需): Function|Lambda - 测试函数
      • list (必需): List - 源列表
    • 返回Boolean - 有元素通过测试时返回 true

    all <fn> <list> - 测试是否所有元素都通过条件

    • 参数
      • fn (必需): Function|Lambda - 测试函数
      • list (必需): List - 源列表
    • 返回Boolean - 所有元素都通过测试时返回 true

    each <fn> <list> - 对每个元素执行函数(副作用操作)

    • 参数
      • fn (必需): Function|Lambda - 要执行的函数
      • list (必需): List - 源列表
    • 返回None - 无返回值
    • 用途:执行副作用操作,如打印或修改外部状态

    转换操作
    #

    join <separator> <list> - 将字符串列表连接为单个字符串

    • 参数
      • separator (必需): String - 分隔符
      • list (必需): List[String] - 字符串列表
    • 返回String - 连接后的字符串
    • 示例List.join(", ", ["a", "b", "c"]) 返回 "a, b, c"

    to_map [key_fn] [val_fn] <list> - 将列表转换为映射

    • 参数
      • key_fn (可选): Function|Lambda - 键提取函数
      • val_fn (可选): Function|Lambda - 值提取函数
      • list (必需): List - 源列表
    • 返回Map - 转换后的映射
    • 示例
      • List.to_map((x -> x.id), (y -> y.name), [{id: 1,name: "wang"}, {id: 2,name: "fang"}]) 返回 {1: "wang", 2: "fang"}
      • List.to_map((x -> x.id), [{id: 1}, {id: 2}]) 返回 {1: {id: 1}, 2: {id: 2}}
      • List.to_map(["Q1", 45, "Q2", 52, "Q3", 49, "Q4", 87]) 返回 {"Q1":45, "Q2":52, "Q3":49, "Q4": 87}

    items <list> - 获取索引-值对列表

    • 参数list (必需): List - 源列表
    • 返回List[List] - 索引-值对列表
    • 示例List.items(["a", "b"]) 返回 [[0, "a"], [1, "b"]]

    结构操作函数
    #

    矩阵操作
    #

    transpose <matrix> - 转置矩阵(列表的列表)

    • 参数matrix (必需): List[List] - 要转置的矩阵
    • 返回List[List] - 转置后的矩阵
    • 示例List.transpose([[1, 2], [3, 4]]) 返回 [[1, 3], [2, 4]]

    chunk <size> <list> - 将列表分割为指定大小的块

    • 参数
      • size (必需): Integer - 块大小
      • list (必需): List - 源列表
    • 返回List[List] - 分块后的列表
    • 示例List.chunk(2, [1, 2, 3, 4, 5]) 返回 [[1, 2], [3, 4], [5]]

    配对操作
    #

    zip <list1> <list2> - 将两个列表配对

    • 参数
      • list1 (必需): List - 第一个列表
      • list2 (必需): List - 第二个列表
    • 返回List[List] - 配对后的列表
    • 示例List.zip([1, 2, 3], ["a", "b", "c"]) 返回 [[1, "a"], [2, "b"], [3, "c"]]

    unzip <list_of_pairs> - 解压成对列表

    • 参数list_of_pairs (必需): List[List] - 成对列表
    • 返回List[List] - 包含两个列表的列表
    • 示例List.unzip([[1, "a"], [2, "b"]]) 返回 [[1, 2], ["a", "b"]]

    折叠操作
    #

    foldl <fn> <init> <list> - 从左到右折叠列表

    • 参数
      • fn (必需): Function|Lambda - 折叠函数,接受 (累加值, 当前元素)
      • init (必需): Any - 初始累加值
      • list (必需): List - 源列表
    • 返回Any - 折叠结果
    • 示例List.foldl((acc, x) -> acc + x, 0, [1, 2, 3]) 返回 6

    foldr <fn> <init> <list> - 从右到左折叠列表

    • 参数
      • fn (必需): Function|Lambda - 折叠函数,接受 (当前元素, 累加值)
      • init (必需): Any - 初始累加值
      • list (必需): List - 源列表
    • 返回Any - 折叠结果
    • 示例List.foldr((x, acc) -> acc + x, 0, [1, 2, 3]) 返回 6

    使用示例
    #

    函数式编程示例
    #

     1# 数据处理管道
     2[1, 2, 3, 4, 5] | List.filter((x -> x > 2)) | List.map((x -> x * 2))
     3# 结果: [6, 8, 10]
     4
     5# 统计操作
     6List.sum([1, 2, 3, 4, 5])  # 返回 15
     7List.average([1, 2, 3, 4, 5])  # 返回 3
     8
     9# 分组和聚合
    10users | List.group("department") | Map.map((dept, users) -> List.len(users))

    结构操作示例
    #

    1# 矩阵转置
    2List.transpose([[1, 2, 3], [4, 5, 6]])  # 返回 [[1, 4], [2, 5], [3, 6]]
    3
    4# 列表分块
    5List.chunk(3, [1, 2, 3, 4, 5, 6, 7])  # 返回 [[1, 2, 3], [4, 5, 6], [7]]
    6
    7# 列表配对
    8List.zip([1, 2, 3], ["a", "b", "c"])  # 返回 [[1, "a"], [2, "b"], [3, "c"]]

    Notes
    #

    List 模块提供了全面的列表处理能力,支持函数式编程范式和不可变数据操作。所有函数都经过优化,提供一致的错误处理和类型安全。参数类型说明中,<> 表示必需参数,[] 表示可选参数,... 表示可变参数。特别注意在使用高阶函数时,lambda 表达式需要用括号包围以避免解析歧义。

    实际使用时,支持链式调用,如:

    1[1,2,3].max()

    在示例中,为方便理解,仅使用了类型名称调用。

相关文章