用另一个列表替换列表中的最后一个元素

10
例如,我有两个数组a array1array2
array1 = ['A', 'B', 'C', 'D', 'E', 'F',]
array2 = ['G', 'H', 'I',]`

现在我想要的输出结果是:

array1 = ['A', 'B', 'C', 'D', 'E', 'G', 'H', 'I',]

我该如何在Python中实现这个功能?

5个回答

20
>>> array1 = ['A', 'B', 'C', 'D', 'E', 'F']
>>> array2 = ['G', 'H', 'I']
>>> array1 = array1[:-1] + array2
>>> array1
['A', 'B', 'C', 'D', 'E', 'G', 'H', 'I']

19

要替换Python列表的部分,可以使用切片赋值:

>>> array1 = ['A', 'B', 'C', 'D', 'E', 'F']
>>> array2 = ['G', 'H', 'I']
>>> array1[-1:] = array2
>>> array1
['A', 'B', 'C', 'D', 'E', 'G', 'H', 'I']
你可以使用切片赋值来替换列表的任何部分,包括在不替换现有元素的情况下插入列表:
>>> array1[0:0] = ['1st', '2nd']
>>> array1
['1st', '2nd', 'A', 'B', 'C', 'D', 'E', 'G', 'H', 'I']

这里的[0:0]切片选择了array1的一个空部分,并用新元素“替换”它。


我从我的解决方案中移除了原地替换的选项,因为你先提供了它。 - jamylak
@jamylak:很棒,你的帖子已经得到了我的投票。 :-) 更新以说明另一种切片赋值技巧,进一步解释了正在发生的事情。 - Martijn Pieters
如果您认为这是更好的方式,请撤回投票,我认为这似乎更符合Python的风格。 - jamylak
2
@jamylak:两种方法都是有效的;我认为OP的意思是要修改array1,就像我所做的那样,但这也不是百分之百清楚。 - Martijn Pieters

0

Python3 的另一种解决方案:

>>> array1 = ['A', 'B', 'C', 'D', 'E', 'F',]
>>> array2 = ['G', 'H', 'I',]
>>> array1 = [*array1[:-1], *array2]
>>> array1
['A', 'B', 'C', 'D', 'E', 'G', 'H', 'I']

0

这并没有解决“替换最后一个元素”的问题。事实上,由于您没有调用 list 或将其结果分配给 array1,所以现在该代码什么也没做。 - DSM
你说得对。我漏掉了那个点。刚刚编辑过了,考虑到了它并且进行了分配,这是很明显的。;) - Nicolas Landier
itertools.chain 不会返回一个列表,而是返回一个 itertools.chain 对象。 - DSM
确实,但根据使用情况而定,如果像列表一样可迭代,那么就可以使用它。 - Nicolas Landier

-1
>>> array1.remove(array1[len(array1)-1])
>>> for i in array2:
        array1.append(i)

有点天真,但是有效。


1
请使用 array1.pop(),然后您只需执行:array1 += array2 - jamylak
不仅幼稚,而且对于大型列表也要慢得多。 - Martijn Pieters
4
只有当列表中最后一个成员仅出现一次时,才会起作用。如果 array1 = ["A", "B", "C", "A"],则删除操作将选择错误的 "A" - DSM
除非你的删除条件实际上是要移除具有特定值的元素,当你不知道/不关心它在列表中的位置时,绝对不要使用list.remove。如果你的删除条件基于位置(如本例)或任何其他类型的条件,总会有比“找到我想要删除的元素然后调用remove”的更好方法。如果你已经通过其他方式找到了元素,list.remove是不必要的低效操作,并且在这种情况下经常会出错,正如DSM's的评论所解释的那样。 - Ben

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