Заполнение списка в python с определенным значением

Возможный дубликат:
Некоторая встроенная панель для добавления списка в python

У меня есть метод, который вернет список (переменная экземпляра) с 4 элементами. Другой метод используется для назначения значений списку.

Но на данный момент я не могу гарантировать, что список имеет 4 элемента, когда он просил, поэтому я хочу заполнить его 0.

Есть ли способ заполнить его с помощью 0, отличного от цикла?

for i in range(4 - len(self.myList)):
   self.myList.append(0)

Ответ 1

self.myList.extend([0] * (4 - len(self.myList)))

Это работает при заполнении целыми числами. Не делайте этого с изменяемыми объектами.

Другая возможность:

self.myList = (self.myList + [0] * 4)[:4]

Ответ 2

>>> out = [0,0,0,0]   # the "template" 
>>> x = [1,2]
>>> out[:len(x)] = x 
>>> print out
[1, 2, 0, 0]

Присвоение x фрагменту out эквивалентно:

out.__setitem__(slice(0, len(x)), x)

или

operator.setitem(out, slice(0, len(x)), x)

Ответ 3

Другой способ: itertools:

from itertools import repeat
self.my_list.extend(repeat(0, 4 - len(self.my_list)))

Ответ 4

list = object.method()
list = list + [0 for _ in range(4-len(list))]

Ответ 5

Почему бы не создать небольшую полезную функцию?

>>> def pad(l, content, width):
...     l.extend([content] * (width - len(l)))
...     return l
... 
>>> pad([1, 2], 0, 4)
[1, 2, 0, 0]
>>> pad([1, 2], 2, 4)
[1, 2, 2, 2]
>>> pad([1, 2], 0, 40)
[1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> 

Ответ 6

self.my_list.extend([0 for _ in range(4 - len(self.my_list))])

Ответ 7

Хакерное решение для добавления и вырезания:

>>> x = [1,2]
>>> (x + [0] * 4)[:4]
[1, 2, 0, 0]

Или:

>>> (x + [0] * (4 - len(x)))
[1, 2, 0, 0]