我有一份清单,就像这样。
[[1, 2, 3], [4, 2, 7], [9, 5, 6]]
我想通过前一个子列表的第一个元素减去每个子列表的第一个元素,然后,我还想将第一个子列表的第一个元素设置为零。产生
[[0, 2, 3], [3, 2, 7], [5, 5, 6]]
我已经尝试过几次写一个函数,我无法弄清楚我将如何迭代 - 因为如果我希望减法与所有原始值一致,例如,在我减去之后4乘1并且第二个列表的第一个元素得到3,我仍然想要减去9(第三个列表的第一个元素)乘以4(第二个列表的原始值),而不是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]]