如何使用python填充0列表

时间:2011-05-06 07:56:51

标签: python list

我想从另一个列表中获取固定长度列表,例如:

a = ['a','b','c']
b = [0,0,0,0,0,0,0,0,0,0]

我希望得到一个这样的列表:['a','b','c',0,0,0,0,0,0,0]。换句话说,如果len(a) < len(b),我想用列表a中的值填充列表b直到列表b的长度,有点类似于{{3}确实。

这是我的代码:

a=['a','b','c']
b = [0 for i in range(5)]
b = [a[i] for i in b if a[i] else i]

print a

但它显示错误:

  File "c.py", line 7
    b = [a[i] for i in b if a[i] else i]
                                    ^
SyntaxError: invalid syntax

我该怎么办?

9 个答案:

答案 0 :(得分:81)

为什么不呢:

a = a + [0]*(maxLen - len(a))

答案 1 :(得分:23)

使用itertools重复。

>>> from itertools import repeat
>>> a + list(repeat(0, 6))
['a', 'b', 'c', 0, 0, 0, 0, 0, 0]

答案 2 :(得分:7)

为什么不

c = (a + b)[:len(b)]

答案 3 :(得分:2)

更明确地说,此解决方案将b的第一个元素替换为a的所有元素,而不管ab中的值:

a + b[len(a):]

这也适用于:

>>> a = ['a', ['b'], None, False]
>>> b = [0, 1, 2, 3, 4, 5]
>>> a + b[len(a):]
['a', ['b'], None, False, 4, 5] 

如果您不希望结果超过b

>>> a = ['a', ['b'], None, False]
>>> b = [0, 1, 2]
>>> (a + b[len(a):])[:len(b)]
['a', ['b'], None]

答案 4 :(得分:2)

a+[0]*(len(b) - len(a))

['a', 'b', 'c', 0, 0, 0, 0, 0, 0, 0]

答案 5 :(得分:1)

如果要填充可变值,例如使用dict s:

map(lambda x: {}, [None] * n)

其中n是数组中元素的数量。

>>> map(lambda x: {}, [None] * 14)
[{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
>>> l = map(lambda x: {}, [None] * 14)
>>> l[0]
{}
>>> l[0]['bar'] = 'foo'
>>> l
[{'bar': 'foo'}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]

在没有lambda的情况下填充会导致每个元素都为{'bar': 'foo'}

答案 6 :(得分:0)

你不能这样做:

a = ['a','b','c']
b = [0,0,0,0,0,0,0,0]

c = a + b #= ['a','b','c',0,0,0,0,0,0,0]

答案 7 :(得分:0)

LIST_LENGTH = 10
a = ['a','b','c']

while len(a) < LIST_LENGTH:
    a.append(0)

答案 8 :(得分:0)

只是另一种解决方案:

a = ['a', 'b', 'c']
maxlen = 10
result = [(0 if i+1 > len(a) else a[i])  for i in range(maxlen)]

我更喜欢其他一些解决方案。