【发布时间】:2014-06-05 17:54:56
【问题描述】:
我的目标是获取一个未知数量的元素列表,并将其扩展/切片为精确的 n 元素,用0 填充太短的列表并切片太长的列表。
例如
n = 10
foo = [1,2,3,4]
print some_func(foo,n)
应该返回[1,2,3,4,0,0,0,0,0,0],并且
n = 10
foo = [1,2,3,4,5,6,7,8,9,10,11,12]
print some_func(foo,n)
应该返回[1,2,3,4,5,6,7,8,9,10]
现在我正在这样做:
def some_function(l, n):
l.extend([0] * n)
l = l[:n]
return l
但这似乎效率低下。有没有更 Pythonic 的方式来做到这一点?
编辑:澄清一点,我不是要修改原始数组,而是返回一个可以是浅拷贝的新数组。
【问题讨论】:
-
为什么看起来效率低?
-
l = l[:n]不会修改原始列表,只是创建一个新的临时列表,当some_function返回时,其唯一引用超出范围。 -
@shx2 这是 pad 和 slice,我想知道是否有更有效的方法来做这两者。
-
对不起,输入问题时忘记
return l
标签: python