2012-06-19 2 views
2

Я очень новичок в Python, поэтому, пожалуйста, простите мне основной вопрос.Как добавить элементы differents в том же массиве в Python?

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

Я пытался что-то вроде:

x1=[0,...,399] 

n = len(x1) 

x2 = [] 

i = 0 
for i in range(0,n): 
    x2[i]=(x1[i]+x1[i+1])/2 

Но это дает мне ошибку: IndexError: list assignment index out of range

Спасибо заранее.

+3

try 'x2.append ((x1 [i] + x1 [i + 1])/2)' – astynax

+0

ожидаемый выход? –

+1

Попробуйте выполнить 'for i в диапазоне (n-1):'. –

ответ

3

Проблема в том, что вы не можете присвоить значение индексу в списке, который превышает длину списка. Так как вы просто хотите, чтобы продолжать добавлять элементы в список, используйте метод list.append() вместо:

n = len(x1) 

x2 = [] 

i = 0 
for i in range(n-1): 
    x2.append((x1[i]+x1[i+1])/2) 

Обратите внимание, что я также пониженный диапазон по одному, в противном случае x1[i+1] вызовет IndexError.

1

А короче и быстрее решение одной строки, используя списочные:

x1=range(0,400) #use xrange if on python 2.7 
x2=[(x1[i]+x1[i+1])/2 for i in range(len(x1)) if i<len(x1)-1] 
+0

Зачем использовать перечисление, если вы не используете 'x'? ISTM более коротким способом listcomp будет '[(x + y) /2.0 для x, y в zip (x1, x1 [1:])]'. – DSM

+0

заменил 'enumerate'' range', не использовал zip, потому что это то, что мне пришло в голову, когда я решал это. –

0

FP-вещий путь:

x1 = [1.0, 2.0, 3.0, 4.0, 5.0] 
x2 = map(lambda x, y: (x + y)/2, x1, [0] + x1[:-1]) 
+0

Вы имели в виду использовать 'map' здесь? – DSM

+0

@DMS, да конечно - моя вина! Спасибо. Исправлена. – astynax

1

Самый лаконичный способ я могу думать, выражать это:

[(i + j)/2 for i, j in zip(xrange(400), xrange(1,400))] 

Или, что эквивалентно:

xs = range(400) 
[(i + j)/2 for i, j in zip(xs, xs[1:])] 

Очевидно, что в Python3 xrange устарел, так что там вы можете использовать range. Кроме того, в Python3 изменяется поведение по умолчанию /, поэтому вам нужно будет использовать //, если вам нужны целые числа.

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