Как я могу создать list
, который содержит только нули? Я хочу иметь возможность создавать нули list
для каждого int
в range(10)
Например, если int
в диапазоне 4
, я получу:
[0,0,0,0]
и для 7
:
[0,0,0,0,0,0,0]
Как я могу создать list
, который содержит только нули? Я хочу иметь возможность создавать нули list
для каждого int
в range(10)
Например, если int
в диапазоне 4
, я получу:
[0,0,0,0]
и для 7
:
[0,0,0,0,0,0,0]
#add code here to figure out the number of 0 you need, naming the variable n.
listofzeros = [0] * n
если вы хотите поместить его в функцию, просто запустите этот код и добавьте return listofzeros
Что будет выглядеть так:
def zerolistmaker(n):
listofzeros = [0] * n
return listofzeros
вывод образца:
>>> zerolistmaker(4)
[0, 0, 0, 0]
>>> zerolistmaker(5)
[0, 0, 0, 0, 0]
>>> zerolistmaker(15)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>>
$python 2.7.8
from timeit import timeit
import numpy
timeit("list(0 for i in xrange(0, 100000))", number=1000)
> 8.173301935195923
timeit("[0 for i in xrange(0, 100000)]", number=1000)
> 4.881675958633423
timeit("[0] * 100000", number=1000)
> 0.6624710559844971
timeit('list(itertools.repeat(0, 100000))', 'import itertools', number=1000)
> 1.0820629596710205
Вы должны использовать [0] * n
для создания списка с n
нулями.
Посмотрите, почему [] быстрее, чем список()
Однако есть как-то, но itertools.repeat
и [0] * n
будут создавать списки, чьи элементы относятся к тому же id
. Это не проблема с неизменяемыми объектами, такими как целые числа или строки, но если вы попытаетесь создать список изменяемых объектов, например список списков ([[]] * n
), то все элементы будут ссылаться на один и тот же объект.
a = [[]] * 10
a[0].append(1)
a
> [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
[0] * n
создаст список сразу, пока repeat
может использоваться для создания списка лениво при первом доступе.
Если вы имеете дело с действительно большим количеством данных, и вашей проблеме не требуется переменная длина списка или несколько типов данных в списке, лучше использовать массивы numpy
.
timeit('numpy.zeros(100000, numpy.int)', 'import numpy', number=1000)
> 0.057849884033203125
numpy
массивы также будут потреблять меньше памяти.
Самый простой способ создать список, в котором все значения одинаковы, - это умножение одного элемента на n
.
>>> [0] * 4
[0, 0, 0, 0]
Итак, для вашего цикла:
for i in range(10):
print [0] * i
$ python3
>>> from itertools import repeat
>>> list(repeat(0, 7))
[0, 0, 0, 0, 0, 0, 0]
zlists = [[0] * i for i in range(10)]
zlists[0]
- это список из 0 нулей, zlists[1]
- это список из 1 нуля, zlists[2]
- список из двух нулей и т.д.
zeros=[0]*4
вы можете заменить 4
в приведенном выше примере любым количеством, которое вы хотите.
Если вам нужна функция, которая вернет произвольное количество нулей в списке, попробуйте следующее:
def make_zeros(number):
return [0] * number
list = make_zeros(10)
# list now contains: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Вот способ xrange:
list(0 for i in xrange(0,5))