Вопрос:

Python, вычитающий элементы в списках из предыдущего элемента

python list loops

6352 просмотра

3 ответа

27 Репутация автора

У меня есть цикл, который производит несколько списков, таких как эти:

  [1,6,2,8,3,4]

  [8,1,2,3,7,2]

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

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

Например, первый список должен выглядеть примерно так:

  [-5, 4,-6, 5,-1]

Я пытался сделать это вручную, но слишком много списков, чтобы сделать это, и это заняло бы слишком много времени.

Как бы я сделал это в наименьшем количестве строк кода?

Автор: Kate Источник Размещён: 22.08.2016 08:52

Ответы (3)


5 плюса

63304 Репутация автора

Из вашего обновленного примера, похоже, дан список, который [a, b, c, d, ...]вы хотите [a-b, b-c, c-d, d-e, ...]получить. Для этого вам следует zipсоставить список с самим собой, сместить на одну позицию и вычесть элементы в парах.

lst = [1,6,2,8,3,4]
res = [x-y for x, y in zip(lst, lst[1:])]    
print(res)  # [-5, 4, -6, 5, -1]

Если списки намного длиннее, вы можете вместо этого создать итератор, использовать teeдля дублирования этого итератора и продвинуть одного из итераторов на одну позицию с помощью next:

import itertools    
i1, i2 = itertools.tee(iter(lst))
next(i2)
res = [x-y for x, y in itertools.izip(i1, i2)]  # or just zip in Python 3
Автор: tobias_k Размещён: 22.08.2016 09:10

-1 плюса

71 Репутация автора

Если я вас правильно понимаю, вы хотите оптимизировать свой код, чтобы он работал быстрее. Сокращение строк кода не улучшит это, так как вы просматриваете списки.

Из того, что я могу сказать, ваша проблема не может быть решена с помощью n-1 вычитаний (где n - количество входных значений). Однако может быть более эффективное решение, если вы знаете, как создаются списки.

Автор: RobinW Размещён: 22.08.2016 09:17

1 плюс

30994 Репутация автора

>>> my_list = [1,6,2,8,3,4]
>>> [my_list[i] - my_list[i+1] for i in range(len(my_list) -1)]
[-5, 4, -6, 5, -1]
Автор: Moinuddin Quadri Размещён: 22.08.2016 09:29
Вопросы из категории :
32x32