用打包的元组替换列表切片

时间:2015-05-22 14:46:53

标签: python list tuples slice

我有一个元组形式的点列表:

myList = [(1,1), (2,2), (3,3), (4,4), (5,5)]

我想用新元组(6,6)替换一段可变长度,结果如下:

myList = [(1,1), (6,6), (5,5)]

我尝试将元组分配给切片,但这会解压缩元组。

startIndex = 1
endIndex = 3
newTuple = (6,6)
myList[startIndex:endIndex] = newTuple
#myList == [(1, 1), 6, 6, (4, 4), (5, 5)]

我目前的方法如下,但我想知道是否有办法绕过这种自动解包,以及是否有更好或更可读的方法来做到这一点。

myList[startIndex] = newTuple
del myList[startIndex+1:endIndex]

2 个答案:

答案 0 :(得分:1)

你需要在列表中包装你的元组(一个值):

${IfThen} 0x29A = 666 ${|} DetailPrint "True" ${|} ; 0x29A is 666 in hex
${IfThen} 0x29A == 666 ${|} DetailPrint "This will never print" ${|}

切片赋值始终遍历右侧对象;你正在用另一个索引替换一个索引列表。

从作业声明文件:

  

最后,要求序列对象将切片替换为指定序列的项。切片的长度可能与指定序列的长度不同,因此如果对象允许,则改变目标序列的长度。

由于您提供了一个简单元组,因此元组中的元素用于替换切片索引。通过将其包装在列表中,您的元组是该列表中的一个元素,并且本身不会进一步解压缩:

myList[startIndex:endIndex] = [newTuple]

答案 1 :(得分:0)

>>> myList = [(1,1), (2,2), (3,3), (4,4), (5,5)]
>>> myList[1:4] = [(6,6)]
>>> myList
[(1, 1), (6, 6), (5, 5)]