下面是我的答案。我想知道是否有一种方法可以同时删除索引0、4、5,以使其看起来更明智。谢谢
def remove_item_045(a_list):
if len(a_list) == 0:
return []
elif len(a_list) >= 1 and len(a_list) < 4:
del(a_list[0])
elif len(a_list) <= 5:
del(a_list[0])
del(a_list[3])
else:
del(a_list[0])
del(a_list[3])
del(a_list[3])
return a_list
答案 0 :(得分:4)
解决问题的Python方法不是删除不需要的东西,而是保留想要的东西:
a_list = list(range(10))
a_list
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a_list = [item for i,item in enumerate(a_list) if i not in {0,4,5}]
a_list
#[1, 2, 3, 6, 7, 8, 9]
答案 1 :(得分:1)
首先:不要使用del(list[index])
,而要使用list.pop(index)
。
第二个:不用使用一堆if
语句来确保没有错误,而是将所有内容放在try:
块中,并忽略所得到的异常。一旦您尝试删除列表中没有的索引,该代码将引发错误,您可以将其用作退出的提示:
def remove_item_045(a_list):
try:
a_list.pop(0) # remove index 0
a_list.pop(3) # remove index 4
a_list.pop(3) # remove index 5
except e:
pass
return a_list
答案 2 :(得分:0)
您可以使用列表切片。
def remove_item_045(a_list):
return a_list[1:4] + a_list[6:]
此外,您的代码中还有一个错误。 < 4
应该是第4行的<= 4
。
此方法的优点是,只要它是支持切片和加法的序列,它就可以工作。
>>> remove_item_045('0123456')
'1236'
>>> remove_item_045(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
['b', 'c', 'd', 'g']
>>> remove_item_045(('a', 'b', 'c', 'd', 'e', 'f', 'g'))
('b', 'c', 'd', 'g')
>>> remove_item_045(b'0123456')
b'12367'
答案 3 :(得分:0)
您可以使用运算符itemgetter()
:
from operator import itemgetter
from itertools import chain
l = list(range(10))
ig = itemgetter(slice(1, 4), slice(6, None))
list(chain.from_iterable(ig(l)))
# [1, 2, 3, 6, 7, 8, 9]