Python中内置的列表填充方法
我有一个列表,它的大小小于 N,我想把它填充到大小为 N,并且用一个特定的值来填充。
当然,我可以使用下面这样的代码来实现,但我觉得可能还有更好的方法我没有想到:
>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
14 个回答
34
这个功能没有现成的函数可以用。不过你可以把现有的函数组合起来,来完成你的任务(或者其他任何事情 :p)。
(这个是从itertools库的padnone
和take
的用法修改而来的)
from itertools import chain, repeat, islice
def pad_infinite(iterable, padding=None):
return chain(iterable, repeat(padding))
def pad(iterable, size, padding=None):
return islice(pad_infinite(iterable, padding), size)
使用方法:
>>> list(pad([1,2,3], 7, ''))
[1, 2, 3, '', '', '', '']
50
我觉得这个方法更直观,也更符合Python的风格。
a = (a + N * [''])[:N]
269
a += [''] * (N - len(a))
new_a = a + [''] * (N - len(a))
class MyList(list):
def ljust(self, n, fillvalue=''):
return self + [fillvalue] * (n - len(self))
a = MyList(['1'])
b = a.ljust(5, '')
或者如果你不想直接修改 a
的内容
你可以创建一个列表的子类,然后随便给这个方法起个名字