在Dynamo中使用Python移除嵌套子列表最后一项的问题
问题:移除嵌套列表中每个子列表的最后一项
在Dynamo中使用Python工作时,我有两组包含嵌套子列表的curves和vectors列表,想要移除每个子列表中的最后一项。尝试用zip函数处理两层列表后得到了空列表,原代码如下:
curves = [[curve1, curve2, curve3, curve4, curve5], [curve6, curve7, curve8, curve9],[curve10,curve11, curve12], [curve13, curve14]] vectors= [[vector1, vector2, vector3, vector4, vector5], [vector6, vector7, vector8, vector9],[vector10,vector11, vector12], [vector13, vector14]] curves1 = [] temp1 = [] vectors1= [] temp2 = [] for i, j in zip(range((0,len(curves)), range(0, len(vectors))): for c, v in zip(range(0, len(i)-1), range(0, len(j)-1): temp1.append(c) temp2.append(v) curves1.append(temp1) vectors1.append(temp2) temp1 =[] temp2 = [] OUT = curves1 , vectors1
期望得到的结果:
curves1 = [[curve1, curve2, curve3, curve4], [curve6, curve7, curve8],[curve10,curve11], [curve13]] vectors1= [[vector1, vector2, vector3, vector4], [vector6, vector7, vector8],[vector10,vector11], [vector13]]
原代码的问题
- 语法错误:第一个
for循环里的range((0,len(curves))多了一层括号,写法无效;且完全没必要用range遍历索引,直接操作子列表更简单。 - 逻辑错误:内层循环把索引值
c、v添加到临时列表,而非对应子列表里的曲线/向量元素,结果完全偏离需求。 - 冗余复杂:嵌套循环加临时列表的写法纯属多余,Python的列表切片可以直接实现移除最后一项的需求。
正确解法
方法1:列表推导式(简洁高效)
直接对每个子列表使用切片[:-1](取到倒数第二个元素),同步处理两组列表:
curves = [[curve1, curve2, curve3, curve4, curve5], [curve6, curve7, curve8, curve9],[curve10,curve11, curve12], [curve13, curve14]] vectors= [[vector1, vector2, vector3, vector4, vector5], [vector6, vector7, vector8, vector9],[vector10,vector11, vector12], [vector13, vector14]] curves1 = [sub_list[:-1] for sub_list in curves] vectors1 = [sub_list[:-1] for sub_list in vectors] OUT = curves1, vectors1
方法2:循环写法(直观易懂)
如果习惯用循环处理,直接遍历每个子列表,切片后添加到新列表:
curves = [[curve1, curve2, curve3, curve4, curve5], [curve6, curve7, curve8, curve9],[curve10,curve11, curve12], [curve13, curve14]] vectors= [[vector1, vector2, vector3, vector4, vector5], [vector6, vector7, vector8, vector9],[vector10,vector11, vector12], [vector13, vector14]] curves1 = [] vectors1 = [] for curve_sub, vector_sub in zip(curves, vectors): # 移除当前子列表的最后一项 curves1.append(curve_sub[:-1]) vectors1.append(vector_sub[:-1]) OUT = curves1, vectors1
两种方法都能得到你想要的结果,其中列表推导式是Python处理这类场景的最优写法。
内容的提问来源于stack exchange,提问作者Redouane TEBBOUNE
相关产品推荐
相关产品推荐

