迭代列表并向后修改值列表
问题描述:
我有一个列表列表,如下所示。迭代列表并向后修改值列表
[[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来防止其他数组。
答
您可以使用旧拉链的列表与 - 本身绝招:
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]]
为我的range(2,1 ,-1): 应该是 我在范围内(2,0,-1): – pRusya
是的,错字。谢谢你指出。我会编辑我的答案。 – Zeokav
谢谢!这工作 - 聪明。 –