迭代列表列表并向后修改值

时间:2016-08-12 16:58:03

标签: python list iteration

我有一份清单,就像这样。

[[1, 2, 3], [4, 2, 7], [9, 5, 6]]

我想通过前一个子列表的第一个元素减去每个子列表的第一个元素,然后,我还想将第一个子列表的第一个元素设置为零。产生

[[0, 2, 3], [3, 2, 7], [5, 5, 6]]

我已经尝试过几次写一个函数,我无法弄清楚我将如何迭代 - 因为如果我希望减法与所有原始值一致,例如,在我减去之后4乘1并且第二个列表的第一个元素得到3,我仍然想要减去9(第三个列表的第一个元素)乘以4(第二个列表的原始值),而不是3。

起初似乎我需要向后遍历列表,但我不知道如何做到这一点。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

如果我的问题是正确的,你只想修改子列表的第一个元素,对吧?你可以这样做 -

li = [[1, 2, 3], [4, 2, 7], [9, 5, 6]]
for i in range(2, 0, -1):
    li[i][0] = li[i][0] - li[i-1][0]
li[0][0] = 0

从后面开始,从中减去前一个子列表的第一个元素,最后设置第一个列表0的第一个元素。当然你可以使用len(li)-1而不是只使用2来防万一对于不同的阵列。

答案 1 :(得分:0)

您可以使用旧的zip-the-list-with-own技巧:

lists= [[1, 2, 3], [4, 2, 7], [9, 5, 6]]

i= reversed(lists) # iterate backwards
next(i) # drop the first (last) list
j= reversed(lists) # create another reversed iterator, but don't drop the 1st list
for list1, list2 in zip(i, j): # zip the two iterators
    list2[0]-= list1[0]
lists[0][0]= 0 # set first value to 0

答案 2 :(得分:0)

lst = [ [1, 2, 3], [4, 2, 7], [9, 5, 6] ]
# print(lst)
t = [ lst[0] ]

for i in range( 1, len(lst) ):
    x = [ lst[i][0] - lst[i-1][0] ]
    x.extend( lst[i][1:] )
    t.append( x )

t[0][0] = 0
print(t)

结果将是:

[[0, 2, 3], [3, 2, 7], [5, 5, 6]]