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

Python 用另一个列表替换列表中的最后一个元素,python,Python,例如,我有两个数组aarray1和array2 array1 = ['A', 'B', 'C', 'D', 'E', 'F',] array2 = ['G', 'H', 'I',]` 现在我希望输出为 array1 = ['A', 'B', 'C', 'D', 'E', 'G', 'H', 'I',] 如何在python中执行此操作要替换python列表的一部分,可以使用切片分配: >>> array1 = ['A', 'B', 'C', 'D', 'E', 'F'] &g

例如,我有两个数组a
array1
array2

array1 = ['A', 'B', 'C', 'D', 'E', 'F',]
array2 = ['G', 'H', 'I',]`
现在我希望输出为

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

如何在python中执行此操作要替换python列表的一部分,可以使用切片分配:

>>> array1 = ['A', 'B', 'C', 'D', 'E', 'F']
>>> array2 = ['G', 'H', 'I']
>>> array1 = array1[:-1] + array2
>>> array1
['A', 'B', 'C', 'D', 'E', 'G', 'H', 'I']
>>> 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]
切片选择
数组1的一个空部分,并用新元素“替换”它

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

有点幼稚,但很管用。

在链接数组时,使用itertools可能会很有用:

import itertools
array1 = itertools.chain(array1[:-1], array2)
就这样


Doc:

从我的解决方案中删除了就地替代方案,因为您首先在这里使用了它。@jamylak:很难,您的帖子已经得到了我的投票。:-)更新说明了另一个切片分配技巧,以进一步解释正在发生的事情。如果你认为这是更好的方法,请收回投票,我认为这似乎更像蟒蛇。@jamylak:两种方法都是有效的;我认为OP的意思是像我所做的那样修改
array1
,但这也不是100%清楚。请改用
array1.pop()
。然后你可以这样做:
array1+=array2
。这不仅简单,而且对于大型列表来说速度也慢了很多。这只有在列表的最后一个成员只出现一次时才有效。如果
array1=[“A”、“B”、“C”、“A”]
,则删除将采用错误的
“A”
。永远不要使用list.remove,除非您的删除标准实际上是删除具有特定值的元素,而您不知道/不关心该元素在列表中的位置。如果您的删除标准基于位置(如本例中所示)或任何其他类型的标准,那么总有一种比“找到我要删除的元素,然后调用删除”更好的方法。如果您已经通过其他方法找到了元素,并且经常在这种情况下做错误的事情,则list.remove的速度会非常慢,正如DSM的评论所解释的。这并没有解决“替换最后一个元素”方面的问题。事实上,由于您没有调用
list
或将结果分配给
array1
,所以现在代码什么都不做。您是对的。我没有抓住那一点。只是为了考虑到这一点而进行了编辑,并进行了一些明显的分配。;)
itertools.chain
不返回列表。它返回一个
itertools.chain
对象。事实上,这取决于用例,因为它与列表一样可编辑。