什么是从列表中提取(和删除)切片的pythonic方法?或者...... slice + = list运算符 - python的“逆”是什么

时间:2014-03-12 05:50:45

标签: python-3.x linked-list operator-overloading slice

我知道如何将列表插入列表,“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)] 

任何提示?是否有切片“ - =”运算符我可以用来反转切片“+ =”运算符的动作?

2 个答案:

答案 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]

干杯!