我有两个列表:
l1 = [254, 255, 254, 254, 254, 254, 255, 255, 254]
l2 = [(255, 255, 255, 0), (255, 255, 255, 0), (255, 255, 255, 0)]
我想修改 l1 并将 l2 中的 0 插入索引 3、7 和 11,因此 l1 看起来像这样:
[254, 255, 254, 0, 254, 254, 254, 0, 255, 255, 254, 0]
当我使用这段代码时它有效:
l1.insert(3, l2[0][-1])
l1.insert(7, l2[1][-1])
l1.insert(11, l2[2][-1])
但是当我尝试不使用 insert() 函数时:
l1 = l1[:3] + l2[0][-1] + l1[3:]
l1 = l1[:7] + l2[1][-1] + l1[7:]
l1 = l1[:11] + l2[2][-1] + l1[11:]
我得到一个错误:
TypeError: can only concatenate list (not "int") to list
我做错了什么?
请您参考如下方法:
问题是您使用 + 来连接列表,但在这里您没有连接列表,而是使用 int 连接列表> 有一个列表。确实:
l1 = l1[:3] + l2[0][-1] + l1[3:]
# ^ list ^ int ^ list
您可以通过将第二个参数设为列表(例如用方括号将其括起来)来解决此问题:
l1 = l1[:3] + <b>[</b>l2[0][-1]<b>]</b> + l1[3:]
# ^ list ^ list ^ list
然而,使用 insert 更好:它不易出错(我们可以假设它经过有效测试)而且通常更有效(因为插入就地完成)。
最后请注意,如果您插入 0,0 的来源并不重要:int s 是不可变的,通常是小的 int,是单例:始终只有一个零 0 int 在 Python 中。
