Python:组合两个列表,覆盖第一个列表的最后几行

时间:2013-07-22 15:21:17

标签: python list concatenation

这是一个相当简单的问题,但我正在寻找最恐怖的方法。我有两个清单:

a = [..., 5, 7, 4, 8]
b = [a, b, c, d]

我需要合并这两个列表,覆盖列表a的最后3个数字,以便生成以下列表:

c = [..., 5, a, b, c, d]

...表示不同长度的数字集,所以理想情况下,执行此操作的方法将使用列表末尾的引用而不是开头(即a[-3]行的引用而不是a[27])。

我已经尝试了各种for循环来遍历列表,直到它到达正确的位置,但这看起来非常低效,我确信必须有一种更清晰的方法。

感谢您的帮助,非常感谢。

3 个答案:

答案 0 :(得分:4)

如果您需要 new 列表,请使用切片和连接:

c = a[:-3] + b

Python切片表示法允许否定索引,解释为相对于列表的长度。 [:-3][0:len(a) - 3]相同;切除除了最后三个元素之外的所有内容。

您还可以通过指定切片来就地更改a

a[-3:] = b

a的最后3个元素替换为b的所有元素。

答案 1 :(得分:2)

首先,我将值3保存为常量(以避免幻数)。

然后我只是使用:

NUMBER_FROM_END = 3
c = a[:-NUMBER_FROM_END] + b

答案 2 :(得分:0)

如果您想就地更改list a,可以使用list's类方法extend。 1)

a = a[:-3]
a.extend(b)

2)你可以反转列表然后再使用extend。

a = range(10)
b = range(11,20)
b = b[::-1] #reverse b 
b.extend(a[:-3][::-1]) #remove last 3 element of a and reverse it
b = b[::-1]   #again reverse b to get final result