假设我有一个列表
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
,我想同时删除1到4和7到10的元素。在Python中是否可以这样做,还是只能一次删除一个范围?>>> 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]
del my_list[0:4], my_list[6:10]
的顺序,结果就会不同 :( - wim__del__
的定义,它一次只接受一个对象。 - Moinuddin Quadri您的示例有一种获取结果的替代方法,可以使用切片赋值来完成:
my_list[:] = my_list[5:7]
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lst[:] = set(lst).difference(range(1, 5) + range(7, 11))
>>> lst
[5, 6]
In [42]: L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [43]: ranges = [(1,4), (7,10)]
In [44]: for low,high in ranges[::-1]: L[low:high] = []
In [45]: L
Out[45]: [1, 5, 6, 7]