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

问题描述:

我有一个列表列表,如下所示。迭代列表并向后修改值列表

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

我想前面的子表的第一个元素减去每个子列表的第一个元素,事后,我也想在第一子列表的第一个元素设置为零。产生

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

我试图写一个函数的这几次,我想不通我怎么会遍历 - 因为如果我想减法要与所有的原始值,例如,在我减去4后,得到3作为第二个列表的第一个元素后,我仍然想要9(第三个列表的第一个元素)减去4(第二个列表的原始值),而不是3.

起初好像我需要向后遍历列表,但我不知道如何做到这一点。任何帮助是极大的赞赏。

如果我得到了正确的问题,你只想修改子列表的第一个元素,对吧?你可以不喜欢这个 -

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

为我的range(2,1 ,-1): 应该是 我在范围内(2,0,-1): – pRusya

+0

是的,错字。谢谢你指出。我会编辑我的答案。 – Zeokav

+0

谢谢!这工作 - 聪明。 –

您可以使用旧拉链的列表与 - 本身绝招:

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 

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