0

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

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

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

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

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

我尝试了各种for循环来循环遍历列表,直到它到达正确的点,但这似乎效率很低,我确信必须有一种更清洁的方式来做到这一点。

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

4

3 回答 3

4

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

c = a[:-3] + b

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

您还可以a通过分配给切片来就地更改:

a[-3:] = b

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

于 2013-07-22T15:22:10.077 回答
2

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

然后我会简单地使用:

NUMBER_FROM_END = 3
c = a[:-NUMBER_FROM_END] + b
于 2013-07-22T15:23:23.900 回答
0

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

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

2)您可以反转列表,然后再次对其使用扩展。

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
于 2013-07-22T15:41:22.870 回答