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
节点实现列表拆分,通过输入拆分间距进行拆分;将列表分割为指定长度的一组连续子列表。
![Untitled](C:\Users\earth\Desktop\C:\Users\earth\Desktop\List 列表处理 ©嗜血星空earth 1911871e92ee4422b06c95573be54e11\Untitled 6.jpeg)
列表计数
使用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 |