Grasshopper中Python列表元素与同列表后续元素运算的替代方案
简化Grasshopper中Python列表循环相邻元素运算的方法
针对你在Grasshopper中处理列表时,需要实现**每个元素与下一个元素(最后一个元素配对第一个)**运算的需求,这里提供几种比复制偏移列表更简洁的实现方式:
方案1:列表推导式直接合并逻辑
无需单独定义偏移列表,把原逻辑整合到一行列表推导中,减少变量冗余:
TestList = [0,1,2,3,4,5] TestList3 = [a + b for a, b in zip(TestList, TestList[-1:] + TestList[:-1])] print(TestList3) # 输出: [5,1,3,5,7,9]
方案2:用itertools.cycle实现循环迭代
适合处理大型列表,避免创建重复列表占用内存:
import itertools TestList = [0,1,2,3,4,5] cycled_list = itertools.cycle(TestList) next(cycled_list) # 将迭代器偏移一位,指向原列表的第二个元素 TestList3 = [num + next(cycled_list) for num in TestList] print(TestList3) # 输出: [5,1,3,5,7,9]
cycle会生成一个无限循环的迭代器,通过next()控制偏移,遍历原列表时自动配对下一个元素,最后一个元素会自然配对第一个元素。
方案3:索引模运算直接访问
最直观的索引处理方式,无需额外依赖或列表复制,适合Grasshopper中固定长度的几何列表:
TestList = [0,1,2,3,4,5] list_len = len(TestList) TestList3 = [TestList[i] + TestList[(i + 1) % list_len] for i in range(list_len)] print(TestList3) # 输出: [5,1,3,5,7,9]
利用(i+1) % list_len实现循环索引:当i是最后一个元素的索引时,(i+1)取模后回到0,正好对应第一个元素。
内容的提问来源于stack exchange,提问作者Julinho91
相关产品推荐
相关产品推荐

