我知道如何将列表插入列表,“slice + = list”...
master=[0,1,2,3,7,8,9]
master[:4]+=[4,5,6] # insert 4,5,6
(粗略地)此操作的反向是从列表中删除切片4:7,我试过:
extracted=del master[4:7]
但是这会产生语法错误“SyntaxError:invalid syntax”。 同样,反切片运算符“ - =”似乎不存在。
作为一种解决方法,我使用了以下内容:
extracted=master[4:7]; del master[4:7]
这“工作”,“提取”是从“主”中删除的子片,例如
print dict(master=master,extracted=extracted)
输出:
{'extracted': [4, 5, 6], 'master': [0, 1, 2, 3, 7, 8, 9]}
有更好/ pythonic /更简单的方法吗?
特别是我不喜欢重复的[4:7]:
extracted=master[4:7]; del master[4:7]"
由于潜在的副作用:例如
extracted=master[randint(0,3):randint(7,10)]; del master[randint(0,3):randint(7,10)]
即。以下内容读得更好,没有“副作用”......
extracted=del master[randint(0,3):randint(7,10)]
任何提示?是否有切片“ - =”运算符我可以用来反转切片“+ =”运算符的动作?
答案 0 :(得分:1)
您最好的选择是使用slice
:
-> s = slice(4, 7)
-> master
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
--> extracted = master[s]
--> extracted
[4, 5, 6]
--> del master[s]
--> master
[0, 1, 2, 3, 7, 8, 9]
它仍然需要两个命令,但您可以使用单个对象来重新呈现所需的部分。
答案 1 :(得分:0)
对我来说,清洁选项如下:
>>> L=[1,2,3,4,5,6] #Define the list
>>> L #Check it
[1, 2, 3, 4, 5, 6]
>>> extract= L[3:6] ; L[3:6]=[] #Assign the slice to 'extract'; delete the slice
>>> L #Items removed from the list
[1, 2, 3]
>>> extract #And assigned to extract
[4, 5, 6]
干杯!