同时删除多个列表范围?

时间:2016-12-21 16:19:46

标签: python list

假设我有一个列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

我想同时从1到4和7到10删除。

是否可以在python中执行此操作,或者我一次只能删除一个范围?

4 个答案:

答案 0 :(得分:1)

据我所知,您无法使用内置函数/库同时删除两个值。但是,您可以在一个衬里中实现这一点。一种方法是使用del关键字删除条目:

>>> my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#        `del` from higher range to lower range
#               v              v
>>> del my_list[6:10], my_list[0:4]
>>> my_list
[5, 6]

答案 1 :(得分:1)

您的示例有另一种方法可以通过使用切片赋值在一个语句中获取结果:

my_list[:] = my_list[5:7]

但是,在一般情况下,不能同时删除多个范围。使用Python列表,您一次只能删除一个 slice

使用fancy indexing可以使用numpy数组。

答案 2 :(得分:1)

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lst[:] = set(lst).difference(range(1, 5) + range(7, 11))
>>> lst
[5, 6]

答案 3 :(得分:-1)

create table #test(block varchar(50))

insert into #test values
('A-M-0000000359/10,11'), ('A-M-0000000359/10')

select substring(block, charindex('/', block)+1, 
    case when charindex(',', block) = 0 then 
        len(block) 
    else 
        (charindex(',', block)-1)-charindex('/', block) 
    end) finalValue
from #test

OUTPUT
----------
finalValue
10
10