Python中内置的列表填充方法

174 投票
14 回答
110395 浏览
提问于 2025-04-16 02:31

我有一个列表,它的大小小于 N,我想把它填充到大小为 N,并且用一个特定的值来填充。

当然,我可以使用下面这样的代码来实现,但我觉得可能还有更好的方法我没有想到:

>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']

14 个回答

34

这个功能没有现成的函数可以用。不过你可以把现有的函数组合起来,来完成你的任务(或者其他任何事情 :p)。

(这个是从itertools库的padnonetake的用法修改而来的)

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 的内容

你可以创建一个列表的子类,然后随便给这个方法起个名字

撰写回答