Python 中是否有类似于 Perl 的 splice 内置函数?

7

我正在寻找一种方法来查找/替换列表中的元素,而不是像perl中使用迭代。

@a = splice(@list,2,3,(1,1,1));
print @a;

在Python中,我们需要通过循环查找和替换。这看起来有点耗时。那么是否有像Perl中一样的替换方法呢?

1个回答

10
你可以使用切片赋值:
somelist[2:5] = [1, 1, 1]

这个方法会将列表中的第2、3和4个元素替换成新列表。新列表可以为空或长度不同。同时,也可以通过将赋值切片设为长度为0来将右侧序列插入目标列表。

示例:

>>> a = [1, 2, 3]
>>> a[1:1] = [4, 5, 6]
>>> a
[1, 4, 5, 6, 2, 3]
>>> b = ['foo', 'bar', 'baz', 'spam', 'ham', 'eggs']
>>> b[2:5] = [1, 1, 1]
>>> b
['foo', 'bar', 1, 1, 1, 'eggs']
>>> c = [42, 38, 22]
>>> c[:2] = []
>>> c
[22]

切片赋值覆盖了与Perl splice()函数相同的用例。

谢谢,这就是我在寻找的内容。 - user3518094
有没有一种方法可以将右侧列表插入左侧列表中,而不需要从左侧列表中删除任何元素? - Hubro
1
@Hubro:好的,只需要选择两个元素之间的索引;somelist[1:1] = iterable将在somelist[1]后插入,somelist[2]之前。 - Martijn Pieters
@Hubro:我在我的答案中有涉及到这个问题:* 你分配的切片长度可以为0*,演示也明确说明了这一点。 - Martijn Pieters
对,我应该更仔细地阅读答案… 我有点认为不能用这种方式完成。不知道你可以使用[]来引用两个索引之间的位置。 - Hubro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接