Мне нравится решение @ Бенджамина.Альтернативный вариант:
import numpy as np
a = np.empty((15,))
a[::2] = 1
a[1::2] = -1
Это также позволяет создавать списки нечетной длины.
РЕДАКТИРОВАТЬ: Также просто отметить скорости для массива из 10000 элементов
import numpy as np
from timeit import Timer
if __name__ == '__main__':
setupstr="""
import numpy as np
N = 10000
"""
method1="""
a = np.empty((N,),int)
a[::2] = 1
a[1::2] = -1
"""
method2="""
a = np.tile([1,-1],N)
"""
method3="""
a = np.array([1,-1]*N)
"""
method4="""
a = np.array(list(itertools.islice(itertools.cycle((1,-1)), N)))
"""
nl = 1000
t1 = Timer(method1, setupstr).timeit(nl)
t2 = Timer(method2, setupstr).timeit(nl)
t3 = Timer(method3, setupstr).timeit(nl)
t4 = Timer(method4, setupstr).timeit(nl)
print 'method1', t1
print 'method2', t2
print 'method3', t3
print 'method4', t4
В результате получается:
method1 0.0130500793457
method2 0.114426136017
method3 4.30518102646
method4 2.84446692467
Если N = 100
, все начинает выравниваться, но, начиная с пустых пустых массивов, все равно значительно быстрее (nl
изменено на 10000)
method1 0.05735206604
method2 0.323992013931
method3 0.556654930115
method4 0.46702003479
Массивы Numpy - это специальные удивительные объекты, и их не следует рассматривать как списки Python.