如何使用python使用0填充列表

如何使用python使用0填充列表,python,list,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)b=[0表示范围(10)内的i]>>a=[a','b','c']>>b=[0表示范围(10)内的i]>>c=[a[i]如果i>c['a','b','c',0,0,0,0,0,0,0]

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

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)
,我想用list
b
中的值填充list
a
,直到列表的长度
b
,这有点类似

这是我的代码:

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
我能做什么?

你就不能这样做:

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]
为什么不只是:

a = a + [0]*(maxLen - len(a))
重复使用itertools

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

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

如果要使用可变值填充,例如使用
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'}

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

a + b[len(a):]
>>> a = ['a', ['b'], None, False]
>>> b = [0, 1, 2]
>>> (a + b[len(a):])[:len(b)]
['a', ['b'], None]
这也适用于:

>>> a = ['a', ['b'], None, False]
>>> b = [0, 1, 2, 3, 4, 5]
>>> a + b[len(a):]
['a', ['b'], None, False, 4, 5] 
如果不希望结果长于
b

a + b[len(a):]
>>> a = ['a', ['b'], None, False]
>>> b = [0, 1, 2]
>>> (a + b[len(a):])[:len(b)]
['a', ['b'], None]
列表长度=10
a=['a','b','c']
而len(a)<列表长度:
a、 追加(0)
这只是另一种解决方案:

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

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

这对不可变对象(如
0
)很有效,但对可变对象不起作用<代码>[0表示范围内的i(最大长度(a)]
适用于不可变对象和可变对象。正如最初的海报所要求的零,这不应该是一个问题。而您的示例仅适用于可变对象,如果您确保为每个i创建一个新的i。您只需用另一个变量替换0,您将遇到相同的问题。@S.Lott的答案似乎对r对于我来说是可变对象。具有固定长度对于串联列表没有问题。您的示例的结果应该是
['a','b','c',0,0,0,0]
,以匹配OP的要求。
[{}对于范围(14)中的x)
实现了同样的效果。这是如此简单和明确。没有列表理解fu或切片符号fu来理解它。不适用于可变对象。请尝试
lst=list(重复([0],10))
,然后
lst[0][0]=1
,然后打印
lst
@naktinis,很容易适应(比最上面的答案更容易)通过列表理解:
a+[MyMutable()表示重复(0,6)]
>>b=[0表示范围(10)内的i]>>a=[a','b','c']>>b=[0表示范围(10)内的i]>>c=[a[i]如果i>c['a','b','c',0,0,0,0,0,0,0]