2016-08-12 3 views
-1

У меня есть список списков, например.Итерирование списка списков и изменение значений назад

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

Я хочу, чтобы вычесть первый элемент каждого подсписка первым элементом предыдущего подсписка, а потом, я также хочу, чтобы установить первый элемент первого подсписка к нулю. Уступая

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

Я пытался писать функцию для этого несколько раз, и я не могу понять, как я бы перебирать - потому что, если я хочу, чтобы вычитанием быть со всеми исходными значениями, например, после того как я вычитаю 4 на 1 и получаю 3 для первого элемента второго списка, я все равно хочу вычесть 9 (первый элемент третьего списка) на 4 (исходное значение второго списка), а не 3.

Сначала мне кажется, что мне нужно будет перебирать список назад, но я понятия не имею, как это сделать. Любая помощь приветствуется.

ответ

2

Если у меня есть вопрос правильно, вы хотите изменить только первый элемент подписок, не так ли? Вы могли бы сделать что-то вроде this-

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

для г в диапазоне (2, 1 , -1): должен быть для i в диапазоне (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]]

Смежные вопросы