2016-08-12 56 views
-1

我有一個列表列表,如下所示。迭代列表並向後修改值列表

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

我想前面的子表的第一個元素減去每個子列表的第一個元素,事後,我也想在第一子列表的第一個元素設置爲零。產生

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

我試圖寫一個函數的這幾次,我想不通我怎麼會遍歷 - 因爲如果我想減法要與所有的原始值,例如,在我減去4後,得到3作爲第二個列表的第一個元素後,我仍然想要9(第三個列表的第一個元素)減去4(第二個列表的原始值),而不是3.

起初好像我需要向後遍歷列表,但我不知道如何做到這一點。任何幫助是極大的讚賞。

回答

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

爲我的range(2,1 ,-1): 應該是 我在範圍內(2,0,-1): – pRusya

+0

是的,錯字。謝謝你指出。我會編輯我的答案。 – Zeokav

+0

謝謝!這工作 - 聰明。 –

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