首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >填充或截断Python列表

填充或截断Python列表
EN

Stack Overflow用户
提问于 2015-05-27 15:13:58
回答 5查看 4.5K关注 0票数 17

我想截短或填充一个列表。例如,对于大小为4:

代码语言:javascript
复制
[1,2,3] -> [1,2,3,0]
[1,2,3,4,5] -> [1,2,3,4]

我可以看到几种方式:

代码语言:javascript
复制
def trp(l, n):
    """ Truncate or pad a list """
    r = l[:n]
    if len(r) < n:
        r.extend([0] * (n - len(r)))
    return r

或者更短,但效率较低的:

代码语言:javascript
复制
map(lambda x, y: x if x else 0, m[0:n], [0] * n)

有没有更优雅的方式来做这件事?

EN

回答 5

Stack Overflow用户

发布于 2015-05-27 15:18:31

您可以使用itertools模块使其完全惰性,如下所示

代码语言:javascript
复制
>>> from itertools import repeat, chain, islice
>>> def trimmer(seq, size, filler=0):
...     return islice(chain(seq, repeat(filler)), size)
... 
>>> list(trimmer([1, 2, 3], 4))
[1, 2, 3, 0]
>>> list(trimmer([1, 2, 3, 4, 5], 4))
[1, 2, 3, 4]

在这里,我们将实际序列与无限中继器链接在一起,并使用filler值。然后我们将链式迭代器切片为size

因此,当序列的元素数量少于size时,chain将开始使用repeat。如果序列至少包含size元素,那么chain甚至不必使用repeat

这种方法的主要优点是,除非被请求,否则不会在内存中创建完整的修剪或填充列表。因此,如果您要做的就是迭代它,那么您可以像这样简单地迭代它

代码语言:javascript
复制
>>> for item in trimmer([1, 2, 3, 4, 5], 4):
...     print(item * 2)
...     
... 
2
4
6
8

或者,如果您希望将其与另一个修剪或填充的列表一起使用,那么您仍然可以在不创建实际列表的情况下这样做,如下所示

代码语言:javascript
复制
>>> for item in chain(trimmer([1, 2, 3], 4), trimmer([1, 2, 3, 4, 5], 4)):
...     print(item, item * 2)
...     
... 
1 2
2 4
3 6
0 0
1 2
2 4
3 6
4 8

懒石;-)

票数 24
EN

Stack Overflow用户

发布于 2015-05-27 16:23:53

就地版本:

代码语言:javascript
复制
l[n:] = [0] * (n - len(l))

复制版本:

代码语言:javascript
复制
l[:n] + [0] * (n - len(l))
票数 6
EN

Stack Overflow用户

发布于 2015-05-27 15:39:14

您可以使用numpy.pad

代码语言:javascript
复制
>>> def trp(a,n):
...    diff=n-len(a)
...    if diff >0:
...         return np.lib.pad(l2,(0,diff),'constant', constant_values=(0))
...    else :
...         return a[:n]
... 

>>> l1=[1, 2, 3, 4, 5]
>>> l2=[1, 2, 3]
>>> trp(l2,4)
array([1, 2, 3, 0])
>>> trp(l1,4)
[1, 2, 3, 4]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30475558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档