erlang lists操作

erlang lists操作转自 http blog csdn net cntway article details nbsp 一 带函数 Pred1 all Pred List boolean 如果 List 中的每个元素作为 Pred 函数的参数执行 结果都返回 true 那么 all 函数返回 true 否则返回 false 例子 lists all fun E trueend

转自:http://blog.csdn.net/cntway/article/details/

 

一,带函数Pred

1, all(Pred, List) -> boolean()

如果List中的每个元素作为Pred函数的参数执行,结果都返回true,那么all函数返回true,
否则返回false

例子:

lists:all(fun(E) -> true end,[1,2,3,4]).

结果

true

例子

lists:any(fun(E) -> is_integer(E) end,[q,2,a,4]).

结果

true

3,dropwhile(Pred, List1) -> List2

将List1列表中的元素作为参数执行Pred函数,如果返回true,将其丢弃,最后返回剩余元素
组成的列表

例子

lists:dropwhile(fun(E) -> is_atom(E) end,[a,1,2,a,b]).

结果

[1,2,a,b]

4,filter(Pred, List1) -> List2

返回一个列表,这个列表是由List1中执行Pred函数返回true的元素组成。

lists:filter(fun(E) -> is_integer(E) end,[q,2,a,4]).

结果:

[2,4]

5,map(Fun, List1) -> List2

将List1中的每个元素去在Fun中执行,然后返回一个元素,最后返回的这些元素组成一个列表,
返回给List2
例子:
lists:map(fun(X)->[X,X] end, [a,b,c]).
结果:[[a,a],[b,b],[c,c]]



6,flatmap(Fun, List1) -> List2

这个函数和map比较类似,相当于执行了
lists:append(lists:map(List1)).
也就是把map的结果进行append处理
例子:
lists:flatmap(fun(X)->[X,X] end, [a,b,c]).
结果:[a,a,b,b,c,c]




7,foldl(Fun, Acc0, List) -> Acc1

Fun这个函数有两个参数
第一个参数是List中的元素,第二个参数是Fun函数执行完后的返回值,这个参数第一次执行时

就是Acc0

感觉原文这里表达有点问题,比较适合的说法应该是当List为空后,返回值是AccN(第二个参数),

lists:foldl源码:

foldl(F, Accu, [Hd|Tail]) ->
    foldl(F, F(Hd, Accu), Tail);
foldl(F, Accu, []) when is_function(F, 2) -> Accu.




例子:对[1,2,3,4,5]求和
lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).
结果:15
执行过程:首先,Fun第一次执行时,X的值取列表List的第一个元素1,Sum取0,
  Fun第二次执行时,X的值取列表List的第二个元素2,Sum取Fun第一次的返回值
  依次轮推,直到List中每个元素执行完,最后foldl返回最后一次的结果。





8,foldr(Fun, Acc0, List) -> Acc1

foldr这个函数和foldl比较相似
不过是Fun执行时,X的值先取List的最后一个,然后取倒数第二个。

9,foreach(Fun, List) -> ok

以List中的每个元素为参数执行Fun函数,执行顺序按照List中元素的顺序,这个函数最后返回ok。是单边的
例子 lists:foreach(fun(X)->
  %%using X to do somethings
  %%
  end,List)



10,keymap(Fun, N, TupleList1) -> TupleList2

对TupleList1中的每个元素的第N项作为参数在Fun中处理,然后这个第N项最后就被替换为Fun执行完返回的值
例子:
List1 = [{name,”zhangjing”},{name,”zhangsan”}].
lists:keymap(fun(X)->
  list_to_atom(X)
  end,2,List1).
结果:
[{name,zhangjing},{name,zhangsan}]






11,mapfoldl(Fun, Acc0, List1) -> {List2, Acc1}

这个函数等于是把map和foldl函数结合起来。将List1中的每一个元素执行Fun函数,执行后花括号的第一个值作为返回值返回,
第二个值作为参数传给Fun,作为下一次用。
例子:
lists:mapfoldl(fun(X, Sum) -> {2*X, X+Sum} end,
0, [1,2,3,4,5]).
{[2,4,6,8,10],15}




12,mapfoldr(Fun, Acc0, List1) -> {List2, Acc1}

这个函数相当于将map和foldr结合起来

14,partition(Pred, List) -> {Satisfying, NotSatisfying}

这个函数的功能是将List分成两个List1和List2,List1是将List元素作为参数去Pred函数中执行返回true的元素组成,
List2由Pred返回false的元素组成。
注意,返回的是一个元组
例子
lists:partition(fun(A) -> A rem 2 == 1 end, [1,2,3,4,5,6,7]).
结果
{[1,3,5,7],[2,4,6]}





19,usort(Fun, List1) -> List2

按照Fun函数进行排序,如果Fun返回true,那么只返回List1的第一个元素
如果Fun返回false,那么List1从大到小排序
例子1
lists:usort(fun(A,B) -> true end, [1,2,2,3,4]).
结果
[1]




例子2
lists:usort(fun(A,B) -> false end, [1,2,2,3,4]).
结果
[4,3,2,2,1]


21,zipwith3(Combine, List1, List2, List3) -> List4

将List1和list2,list3中的每个元素执行Combine函数,然后返回一个元素,List4就是由Combine函数返回的一个个元素组成的。
功能和map有点像,但是这里是对三个列表的操作。
例子
lists:zipwith3(fun(X, Y, Z) -> X+Y+Z end, [1,2,3], [4,5,6],[7,8,9]).
结果
[12,15,18]




二,不带函数Pred

1,append(ListOfLists) -> List1

ListOfLists都是由List组成的,而List一个列表,里面可以是任何类型的元素
这个函数就是将ListOfLists里面的所有列表的元素按顺序编成一个列表
提示:ListOfLists里面的元素必须都是列表才能用这个函数

例子

lists:append([[1, 2, 3], [a, b], [4, 5, 6]]).

结果:

[1,2,3,a,b,4,5,6]

例子

lists:append(“abc”, “def”).

结果

“abcdef”

3,concat(Things) -> string()

这里的Things是一个列表,里面由atom() | integer() | float() | string()
将这个列表里面的元素拼成一个字符串,然后返回

例子

lists:concat([doc, ‘/’, file, ‘.’, 3]).

结果

doc/file.3″

4,delete(Elem, List1) -> List2

List1是由很多Element组成的,这个函数的功能是在List1中寻找第一个和Elem元素一样的,
然后删除之,返回删除后新的列表。

例子

lists:delete({name,”zhangsan”},[{name,”lisi”},{name,”zhangsan”},{name,”wangmazi”})).

结果

[{name,”lisi”},{name,”wangmazi”}]

5,duplicate(N, Elem) -> List

返回一个由N个Elem组成的列表。

例子

lists:duplicate(5,”test”).

结果

[“test”,”test”,”test”,”test”,”test”]

6,flatlength(DeepList) -> integer() >= 0

我的理解是DeepList就是列表里面套列表
计算列表的长度,即用flatten函数将DeepList转化成List后元素的个数
这个函数和length()的区别就是:
length函数是得到列表元素的个数,
而flatlength函数是先将DeepList转化成List后的个数
譬如说List = [1,2,[3,4]]这个列表用
length(List)求的值是:3
lists:flatlength(List)求的值是:4
其实lists:flatlength(List) = length(flatten(List))







7,flatten(DeepList) -> List

将DeepList变成只有term()的list
例子:
lists:flatten([[a,a],[b,b],[c,c]]).
结果:
[a,a,b,b,c,c]



8,flatten(DeepList, Tail) -> List

就是将DeepList变成只有term的List后,在后面再加一个Tail。
例子:
lists:flatten([[a,a],[b,b],[c,c]],[dd]).
结果:
[a,a,b,b,c,c,dd]



9,keydelete(Key, N, TupleList1) -> TupleList2

这个函数适合处理列表里面的元素是元组的情况
删除TupleList1中元素第N个元素和Key一致的元素,只删除第一个一样的,后面一样的不删除
例子:
List = [{name,”zhangjing”},{sex,”male”},{name,”zhangsan”},{sex,”male”}],
lists:keydelete(“male”,2,List)
结果:
[{name,”zhangjing”},{name,”zhangsan”},{sex,”male”}]





10,keyfind(Key, N, TupleList) -> Tuple | false

查找TupleList中的一个Tuple,如果查找到,返回,如果没有查找到,则返回false
这个Tuple必须满足第N个元素和key是一样。
例子:
List1 = [{name,”zhangjing”},{name,”zhangsan”}].
lists:keyfind(“zhangjing”,2,List1)
结果:{name,”zhangjing”}




11,keymember(Key, N, TupleList) -> boolean()

如果TupleList中的元素中存在第N个元素和key一致,则返回true,否则返回false
例子:
List1 = [{name,”zhangjing”},{name,”zhangsan”}].
lists:keymember(“zhangjing”,2,List1).
结果:true



12,keymerge(N, TupleList1, TupleList2) -> TupleList3

将TupleList1和TupleList2进行混合,组成一个TupleList,
新组成的TupleList是按照Tuple的第N个元素进行排序的
例子:
List1 = [{name,”zhangjing”},{name,”zhangsan”}].
List2 = [{nick,”zj”},{nick,”zs”}].
lists:keymerge(2,List1,List2).
结果:
[{name,”zhangjing”},
{name,”zhangsan”},
{nick,”zj”},
{nick,”zs”}]









13,keyreplace(Key, N, TupleList1, NewTuple) -> TupleList2

在TupleList1的Tuple中找出第N个元素和Key一致,然后用NewTuple将这个Tuple替换掉,如果没有找到
,则返回原来的TupleList1
例子:
List1 = [{name,”zhangjing”},{name,”zhangsan”}]
lists:keyreplace(“zhangjing”,2,List1,{nickname,”netzj”}).
结果:
[{nickname,”netzj”},{name,”zhangsan”}]





14,keysearch(Key, N, TupleList) -> {value, Tuple} | false

这个函数和keyfind差不多,就是返回值的结构不一样
也是在TupleList中找一个Tuple,这个Tuple的第N个元素和Key一样。
例子:
List1 = [{name,”zhangjing”},{name,”zhangsan”}]
lists:keysearch(“zhangjing”,2,List1).
结果:
{value,{name,”zhangjing”}}





15,keysort(N, TupleList1) -> TupleList2

对TupleList1中的Tuple按照第N个元素进行排序,然后返回一个新的顺序的TupleList。
不过这种排序是固定的。
例子:
List1 = [{name,”zhangsan”},{name,”zhangjing”}].
lists:keysort(2,List1).
结果:
[{name,”zhangjing”},{name,”zhangsan”}]





16,keystore(Key, N, TupleList1, NewTuple) -> TupleList2

这个函数和keyreplace函数比较像,不同的是,这个keystore在没有找到对应的Tuple时,
会将这个NewTuple追加在这个TupleList1的最后。
例子:
List1 = [{name,”zhangsan”},{name,”zhangjing”}].
找到了的情况
lists:keystore(“zhangjing”,2,List1,{name,”netzhangjing”}).
[{name,”netzhangjing”},{name,”zhangsan”}]
没有找到的情况
lists:keystore(“zhanging”,2,List1,{name,”netzhangjing”}).
[{name,”zhangjing”},{name,”zhangsan”},{name,”netzhangjing”}]








17,keytake(Key, N, TupleList1) -> {value, Tuple, TupleList2} | false

在TupleList1中找Tuple,这个Tuple的第N个元素和Key一致,如果找到了这么一个Tuple
那么返回,{value, Tuple, TupleList2} 其中TupleList2是去掉Tuple的TupleList1.
例子:
List1 = [{name,”zhangjing”},{name,”zhangsan”},{name,”lisi”}].
lists:keytake(“zhangjing”,2,List1).
结果:
{value,{name,”zhangjing”},[{name,”zhangsan”},{name,”lisi”}]}





18,last(List) -> Last

返回:List最后一个元素
例子:
List1 = [{name,”zhangjing”},{name,”zhangsan”},{name,”lisi”}].
lists:last(List1).
结果:
{name,”lisi”}




19,max(List) -> Max

取出List中最大的元素,一般List是整型时比较适合。
例子:
lists:max([1,10,15,6]).
结果:
15



20,member(Elem, List) -> boolean()

如果Elem和List中的某个元素匹配(相同),那么返回true,否则返回false
例子
lists:member({sex,”1″},[{sex,”1″},{sex,”2″},{sex,”3″}]).
结果:
true



21,merge(ListOfLists) -> List1

ListOfLists是一个列表,里面由子列表构成
这个函数的功能就是将这些子列表合并成一个列表。
例子:
lists:merge([[{11}],[{22}],[{33}]]).
结果
[{11},{22},{33}]




22,merge(List1, List2) -> List3

List1和List2分别是一个列表,这个函数的功能是将这两个列表合并成一个列表。
例子:
lists:merge([11],[22]).
结果
[11,22]
[2,1,3,4]




24,min(List) -> Min

返回List中的最小的元素,和max函数对应
例子
lists:min([1,2,3]).
结果
1



25,nth(N, List) -> Elem

返回List中的第N个元素。
例子
lists:nth(2,[{name,”zhangsan”},{name,”lisi”},{name,”wangmazi”}]).
结果
{name,”lisi”}



26,nthtail(N, List) -> Tail

返回List列表中第N个元素后面的元素
例子
lists:nthtail(3, [a, b, c, d, e]).
结果
[d,e]



28,reverse(List1) -> List2
将List1反转
例子
lists:reverse([1,2,3,4]).
结果
[4,3,2,1]




29,reverse(List1, Tail) -> List2

将List1反转,然后将Tail接在反转List1的后面,然后返回
例子
lists:reverse([1, 2, 3, 4], [a, b, c]).
[4,3,2,1,a,b,c]


30,seq(From, To) -> Seq

其中From和To都是整型,这个函数返回一个从From到To的一个整型列表。
例子
lists:seq(1,10).
结果
[1,2,3,4,5,6,7,8,9,10]



31,seq(From, To, Incr) -> Seq

返回一个整型列表,这个列表的后一个元素比前一个元素大Incr。
例子
lists:seq(1,10,4).
[1,5,9]


32,sort(List1) -> List2

将List1中的元素从小到大排序,然后返回新的一个列表。
例子
lists:sort([3,2,1]).
结果
[1,2,3]



34,sublist(List1, Len) -> List2

返回从第一个元素到第Len个元素的列表,这个Len大于List1的长度时,返回全部。
例子
lists:sublist([1,2,3,4,5,6],3).
结果
[1,2,3]



35,sublist(List1, Start, Len) -> List2

返回从List1的第Start个位置开始,后面Len个元素的列表。
例子
lists:sublist([1,2,3,4], 2, 2).
结果
[2,3]



36,subtract(List1, List2) -> List3

等同于 List1 — List2
这个函数功能是返回一个List1的副本,对于List2中的每个元素,第一次在List1副本中出现时被删掉。
例子
lists:subtract(“”,”12″).
结果
“1233”




37,suffix(List1, List2) -> boolean()

如果List1是List2的后缀,那么返回true,否则返回false
例子
lists:suffix(“22″,”1122”).
结果
true



38,sum(List) -> number()

返回List中每个元素的和。其中List中的元素都应该是number()类型的。
例子
lists:sum([1,2,3,4]).
结果
10



40,ukeysort(N, TupleList1) -> TupleList2

TupleList1里面的元素都是元组
这个函数也同样返回一个元素是元组的列表,返回的这个列表是按照元组的第N个元素来排序的,如果元组中有出现
第N个元素相同的情况,删除掉后面的一个元组。
例子
lists:ukeysort(1,[{name,”zhangsan”},{sex,”male”},{name,”himan”}]).
结果
[{name,”zhangsan”},{sex,”male”}]





41,umerge(ListOfLists) -> List1

这个函数和merge唯一不同的就是,里面不能出现相同的元素,如果出现相同的,那么删除之,只保留一个唯一的
例子
lists:umerge([[1,2],[2,3]]).
结果
[1,2,3]
分析:由于[[1,2],[2,3]]中merge后是[1,2,2,3],这个时候有两个相同的元素2,所以只保存一个2,所以结果是[1,2,3].




43,unzip(List1) -> {List2, List3}

List1里面的元素是元组,每个元组由两个元素组成,返回值List2包含每个List1中每个元组的第一个元素
返回值List3包含每个List1中每个元组的第二个元素。
例子
lists:unzip([{name,”zhangsan”},{sex,”male”},{city,”hangzhou”}]).
结果
{[name,sex,city],[“zhangsan”,”male”,”hangzhou”]}




44,unzip3(List1) -> {List2, List3, List4}

List1里面的元素是元组,每个元组由三个元素组成,返回值List2包含每个List1中每个元组的第一个元素;
返回值List3包含每个List1中每个元组的第二个元素;返回值List4包含每个List1中每个元组的第三个元素。
例子
lists:unzip3([{name,”zhangsan”,”apple”},{sex,”male”,”banana”},{city,”hangzhou”,”orange”}]).
结果
{[name,sex,city],
[“zhangsan”,”male”,”hangzhou”],
[“apple”,”banana”,”orange”]}
注意,最终返回的是一个元组。







45,usort(List1) -> List2

将List1按照从小到大的顺序排序,如果排序后有重复的元素,删除重复的,只保存一个唯一的。
例子
lists:usort([4,3,2,1,2,3,4]).
结果
[1,2,3,4]



47,zip3(List1, List2, List3) -> List4

将三个长度相同的列表合并成一个列表
List3是里面的每一个元组的第一个元素是从List1获取的,而每个元组的第二个元素是从List2中获取的
每个元组的第三个元素是从List3中获取的。
例子
lists:zip3([name,sex,city],[“zhangsan”,”male”,”hangzhou”],[“nick”,”1″,”zhejiang”]).
结果
[{name,”zhangsan”,”nick”},
{sex,”male”,”1″},
{city,”hangzhou”,”zhejiang”}]







版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230419.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月24日 上午10:01
下一篇 2026年2月24日 上午10:22


相关推荐

  • 使用 Python 将 PDF 文档转换为图片(Spire.PDF 教程)

    使用 Python 将 PDF 文档转换为图片(Spire.PDF 教程)

    2026年3月12日
    2
  • 数学建模之MATLAB画图汇总

    1.二维数据曲线图1.1绘制二维曲线的基本函数1.plot()函数plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。例:t=0:0.1:2*pi;x=2*t;y=t.*sin(t).*sin(t);plot(x,y);2.含多个输入参数的plot函数plot函数…

    2022年4月4日
    183
  • crontab每小时运行一次

    crontab每小时运行一次先给出 crontab 的语法格式对于网上很多给出的每小时定时任务写法 可以说绝大多数都是错误的 比如对于下面的这种写法 00 每隔一小时执行一次 00 1 与上面是相同的任务这种是正确的吗 对照最前面给出的语法格式来看 这个定时任务在 0 分 每小时 每天 每月 每星期执行 看起来似乎很合理啊 前一个小时的 0 分和后一个小时的 0 分不就是相隔一个小时吗 这样的话

    2026年3月26日
    2
  • Spring Boot热部署-Spring loaded

    Spring Boot热部署-Spring loaded

    2021年5月16日
    154
  • kali linux 网络配置

    kali linux 网络配置目录 1 写入 DHCP 配置 DNS2 重新获取 IP1 写入 DHCP 配置 DNSvi etc network interfacesau 168 1 98gateway192 168 1 1netmask255 255 255 0vi etc resolv confdomainna 8 8 8nameserver1 114 114 114sear

    2026年3月17日
    2
  • RGB565 转 RGB

    RGB565 转 RGBvoidRGB565To unsignedshor shortnRed n565Color amp 0xf800 gt gt 8 shortnGreen n565Color amp 0x07e0 gt gt 3 shortnBlue n565Color amp 0x001f lt lt 3

    2025年11月17日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号