Все ответы показали программный и общий подход. Я предлагаю математический подход, специфичный для вашего случая. Это может быть быстрее, в частности, для длинных списков. Это работает, потому что ваш список представляет собой список натуральных чисел до n
:
Предположим, у нас есть натуральные числа 1, 2, 3, ..., 10
:
>>> nat_seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Вы можете использовать функцию sum
в списке:
>>> print sum(nat_seq)
55
Вы также можете использовать формулу n*(n+1)/2
, где n
- это значение последнего элемента в списке (здесь: nat_seq[-1]
), поэтому вы избегаете повторения элементов:
>>> print (nat_seq[-1]*(nat_seq[-1]+1))/2
55
Для генерации последовательности (1+2)/2, (2+3)/2, ..., (9+10)/2
вы можете использовать генератор и формулу (2*k-1)/2.
(отметьте точку, чтобы сделать значения с плавающей запятой). Вы должны пропустить первый элемент при создании нового списка:
>>> new_seq = [(2*k-1)/2. for k in nat_seq[1:]]
>>> print new_seq
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]
Здесь вы также можете использовать функцию sum
из этого списка:
>>> print sum(new_seq)
49.5
Но вы также можете использовать формулу (((n*2+1)/2)**2-1)/2
, чтобы избежать перебора элементов:
>>> print (((new_seq[-1]*2+1)/2)**2-1)/2
49.5