我有一个方法将返回一个包含4个元素的列表(实例变量)。 另一种方法用于为列表赋值。
但目前我不能保证列表中有4个元素,所以我想用0填充它。
除了说一个循环之外,有没有办法用0填充它?
for i in range(4 - len(self.myList)): self.myList.append(0)
答案 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]