Все ответы показали программный и общий подход. Я предлагаю математический подход, специфичный для вашего дела. Это может быть быстрее, особенно для длинных списков. Это работает, потому что ваш список приведен список натуральных чисел до 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]
), поэтому вы избегаете повторения элемента s:
>>> 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
Как долго этот список? насколько случайными являются значения, от 0 до 1? – kevpie 2010-12-06 08:04:29