这是一个相当简单的问题,但我正在寻找最恐怖的方法。我有两个清单:
a = [..., 5, 7, 4, 8]
b = [a, b, c, d]
我需要合并这两个列表,覆盖列表a
的最后3个数字,以便生成以下列表:
c = [..., 5, a, b, c, d]
...
表示不同长度的数字集,所以理想情况下,执行此操作的方法将使用列表末尾的引用而不是开头(即a[-3]
行的引用而不是a[27]
)。
我已经尝试了各种for
循环来遍历列表,直到它到达正确的位置,但这看起来非常低效,我确信必须有一种更清晰的方法。
感谢您的帮助,非常感谢。
答案 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