Dynamo中List列表是Dynamo使用中的重要内容,对List列表的正确处理是正确使用Dynamo的前提,本文提供部分常用到的List列表处理方式,可按需使用;本文仍在陆续更新中。
Dynamo数据类型
字符串列表:string
Dynamo输入的内容为列表形式如:["0,255,0","128,255,0"],此方式输入内容为字符串列表;
字符串转换为整数
部分使用情况需要转换为整数,整数样式为[[0,255,0],[128,255,0]],可使用String.ToNumber节点进行字符串到整数的转换:

对象转换成字符串,如整数等
使用String from Object节点,将其他对象转换成字符串以满足使用需求;

两个列表的数据两两相连
方法一:使用,List.Join与List.Transpose结合,让两个列表的数据两两相连,作为一组;如下图所示:

数据两两分组
方法二:使用List.Join与List.Combine节点实现两两分组:

两两组合
List.Combine同时支持计算式,如当List.Join替换为*时,可实现列表数据的两两相乘;

两两相乘
数据拍平
使用List.Flatten节点,删除层级关系,可实现多组list作为一个list;

去除列表中的空值
使用List.Clean节点清除列表中的空值;

去除重复值(去重)
使用List.UniqueItems节点可以对列表进行去重操作;

当需要同时对一一对应的表格数据进行删除时候,可以将列表组成表格,行列互换厚再使用去重命令;

数据等级修改
使用List.NormalizeDepth节点为列表添加等级;

列表排序
行列互换
可使用List.Transpose节点实现行列互换,该功能也可使数据实现两两组合;

行列互换
列表逆序
使用List.Reverse节点实现列表顺序逆转

列表按数据第一位内容顺序排布
使用List.Sort节点,使列表按顺序排列,默认按第一位排序,如下生成为按第一个字母顺序进行排序;

列表按数据字符内容顺序排序
使用List.SortByKey节点,实现列表按数据字符内容进行排序;

按提供的列表排序,亦可用作提取指定项,顺序与给定的列表一致
使用List.Reorder节点,实现多项提取,提取的数据按照提取项的列表顺序排列;

随机打乱列表
使用List.Shuffle节点随机打乱列表内容;

列表位置移动
使用List.ShiftIndices实现列表向左/右移动;

删除列表的项
使用List.RemoveItemAtIndex节点删除指定的项;

替换指定的项
使用List.ReplaceItemAtIndex节点替换指定的项列表;

列表合并
使用List.Create节点将多个列表合并成一个列表;原本子列表在大列表中是平行的关系。

使用List.Join合并的列表,生成的子列表为单个列表;

列表拆分
使用List.Chop节点实现列表拆分,通过输入拆分间距进行拆分;将列表分割为指定长度的一组连续子列表。

列表计数
使用List.Count返回列表的项数,只能计算第一个层级的项数;

使用List.Map结合List.Count可以实现第二个层级项数的计算

列表临近数据分组
使用List.Sublists节点,实现对列表临近数据分组;

相邻两个逐个组合,步进值为1

相邻两个逐个组合,步进值为2

每隔三个去除一个,四个同理;
给定列表中,给定长度的所有组合
使用List.Combinations节点,生成给定列表中给定个数的所有组合;

列表重复
方法一:使用List.Cycle节点按指定次数重复输入的数列,输出结果为一个数列;

方法二:使用List.OfRepeatedItem节点按指定次数重复输入的数列,输出的重复数列作为单独的list输出;

在列表开始/结束位置添加一项
使用List.AddItemToFront节点,实现在列表开始位置添加一项;

使用List.AddItemToEnd节点,实现在列表结束位置添加一项;

列表拆分
按指定长度拆分
使用List.Chop节点,实现列表按指定长度拆分成多个列表;

拆分第一项与剩余项分别输出
使用List.Deconstruct拆分第一项与除第一项外剩余的项,分别输出两个list

按指定符号拆分数据,如”,”
使用以下代码,实现按指定符号拆分数据,如根据,位置拆分RGB色值;


其中[['0','255','0'],['128','255','0']]样式输出为字符串,为满足使用需求,可转换为其他种类,如[[0,255,0],[128,255,0]]为整数

1 | LIST1 = IN[0] |
删除项
删除列表中数据的空格内容

代码
1 | # 假设你的数据是列表形式 |
按指定步距删除项
使用List.DropEveryNthItem节点实现按指定步距删除项;offset参数可设置从开始位置忽略的项数;

从列表开头删除指定数量的项
使用List.DropItems节点从列表开始位置删除指定数量的项;

删除指定的项
使用List.RemoveItemAtIndex节点删除数列中指定的项;

从列表中删除非指定类型的项
使用List.RemoveIfNot节点,可提取列表中的一种类型,把其他的类型删除;如单独提取字符串/数字;如下图所示,若需要提取数字,则type输入参数为int;

提取列表
提取第几到第几项
使用Code Block节点,输入a[x],可以提取指定的项,输入a[x..y];可以提取从x~y的项;

按项提取列表
使用List.GetItemAtIndex节点提取列表的项;

从列表开始位置提取固定的几项
使用List.TakeItems节点从列表开始位置提取指定数量的项;

按指定间距提取项
使用List.TakeEveryNthItem节点按指定的间距提取项;

使用>,<,≥,≤,=等对数据进行过滤
使用List.Filter节点对数据进行对比过滤,实现提取对比后的数据;如提取大于6的数据;

按bool输出的结果,对true/false的值分别提取
使用后List.FilterByBoolMask节点,按bool的值区分数据,分别提取值为true/false的数值;

按开始位置,结束位置,间距提取数据
使用List.Slice节点,按开始位置,结束位置,间距 提取所需数据;

从列表1中提取列表2中没有的数
使用List.SetDifference节点,从列表1中提取列表2中没有的数

提取列表1列表2中都有的数据
使用List.SetIntersection节点提取列表1列表2中都有的数据

提取列表的并集,将两个表数据提取到一个表中,一个数据只出现一次
使用List.SetUnion节点,把两个表的内容补充的一起,重复的数据只出现一次;

按给定位置提取列表中字符串的字符
使用String.Substring节点,提取指定开始位置喝字符串的长度;

在指定位置插入数据
使用List.Insert节点在指定位置插入数据;

列表内容替换
查找内容并替换
实现查找,替换成-;
1 | LIST1 = IN[0] |
查找内容并替换,同时查找并删除空格
1 | LIST1 = IN[0] |
指定项的内容替换为所需的内容
使用List.ReplaceItemAtIndex节点,将第五项的内容替换为11;

根据替换的条件,如>,<,≥,≤,=等条件对满足条件的数据进行替换
使用ReplaceByCondition节点对满足条件的数据进行替换;

列表数据对比
使用String.Contains节点查找列表中是否包含选定的字符串,输出bool,包含为true否则为false;建议使用Orchid中的节点;

结合List.FilterByBoolMask节点可以对包含/不包含的数据进行删除处理;
查找表1中对应关键字的值使数据可以一一对应
获取一个对应的值

1 | LIST1 = IN[0] |
1 | LIST1 = IN[0] |
查找对应的值,并输出他在第几项找到的
包含组的列表
1 | LIST1 = IN[0] |
不包含组的列表
1 | # 假设输入是两个列表 |
从第一个list中查找第二个list的第一项为关键字进行查找,查找后输出第一项一样的,linst1,2的内容,并以list2的顺序排序
内容与上诉查找一样,增加数据排序功能;

1 | LIST1 = IN[0] |
以某一符号或文字对数据进行拆分/分割
使用String.Split节点可以实现对数据分割,如原数据为NLG-72-950可拆成三组数据;

获取列表中全部对应的值

1 | LIST1 = IN[0] |
上述代码实现功能与使用List.IndexOf与List.GetItemAtIndex节点组合的效果趋于一致;
- List.IndexOf —— 返回搜索内容的项编号
- List.GetItemAtIndex —— 根据项编号提取对应项

去除小数点

使两个列表内容合并
使用List.Combine节点合并两个列表,实现字段文字添加前后缀;

Python代码中忽略空值对报错的处理;
示例:
1 | eles = [] |
以上for e in enum[1:6]:
获取1~6的内容中,若其中包含空值,会报错;在此需加入`try:以及**except:,pass`**可对报错进行忽略;(此方式直接忽略,没有任何提示)如下所示:
1 | eles = [] |
或者使用如下代码实现上方效果:
1 | ```python |