将列表元素与同一列表中的另一个元素进行操作

问题描述 投票:0回答:1

我在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]

python list loops offset shift
1个回答
0
投票

如果你经常这样做,我会用它制作一个方法,然后你可以根据需要使实现变得冗长并保持使用干净:

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)
© www.soinside.com 2019 - 2024. All rights reserved.