我在grasshopper中使用python来构造复杂的几何形状,因此我经常使用列表和循环。例如,我需要将一个列表元素与另一个列表元素(例如同一列表中的下一个元素)一起操作。有人可以为我的事业提供替代解决方案吗?
干杯, 朱利安
所以我想出的方法是复制列表并移动/偏移列表中的元素。 (参见下面的脚本)由于我的脚本中的列表数量,我很好奇一种更简单的方法。 这是一个小例子。
TestList = [0,1,2,3,4,5]
TestList2 = TestList[-1:] + TestList [:-1]
TestList3 = []
for i, ii in zip(TestList,TestList2):
TestList3.append(i + ii)
print(TestList3)
TestList3 = [5,1,3,5,7,9]
如果你经常这样做,我会用它制作一个方法,然后你可以根据需要使实现变得冗长并保持使用干净:
def shifted_add(data):
data_rotated = data[-1:] + data[:-1]
retval = []
for i, ii in zip(data, data_rotated ):
retval.append(i + ii)
return retval
data = [0,1,2,3,4,5]
print(shifted_add(data))
或
def shifted_add(data):
data_rotated = data[-1:] + data[:-1]
return [i + ii for i, ii in zip(data, data_rotated)]
data = [0,1,2,3,4,5]
print(shifted_add(data))
为了清理它,我可能会想得到如下结果:
def shifted_add(data):
data_rotated = data[-1:] + data[:-1]
for i, ii in zip(data, data_rotated ):
yield i + ii
data = [0,1,2,3,4,5]
print(list(shifted_add(data)))
甚至:
def shifted_add(data):
data_rotated = data[-1:] + data[:-1]
yield from map(sum, zip(data, data_rotated))
data= [0,1,2,3,4,5]
print(list(shifted_add(data)))
或者,如果您不喜欢方法方法并且只想要紧凑的东西,我会选择:
data = [0,1,2,3,4,5]
data_rotated = data[-1:] + data[:-1]
data2 = list(map(sum, zip(data, data_rotated)))
print(data2)
在没有变得太golfy的情况下,从技术上来说你不需要专用变量,你应该能够做到:
data = [0,1,2,3,4,5]
data2 = list(map(sum, zip(data, data[-1:] + data[:-1])))
print(data2)