在python中填充具有特定值的列表

时间:2011-08-11 12:49:31

标签: python list

  

可能重复:
  Some built-in to pad a list in python

我有一个方法将返回一个包含4个元素的列表(实例变量)。 另一种方法用于为列表赋值。

但目前我不能保证列表中有4个元素,所以我想用0填充它。

除了说一个循环之外,有没有办法用0填充它?

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

7 个答案:

答案 0 :(得分:25)

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

这在使用整数填充时有效。不要用可变对象来做。

另一种可能性是:

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

答案 1 :(得分:6)

>>> 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)

答案 2 :(得分: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]
>>> 

答案 3 :(得分:3)

另一种方法,使用itertools

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

一个hacky追加减少的解决方案:

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

或者:

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