从列表中删除多个元素

206

有没有可能同时从列表中删除多个元素?如果我想删除索引为0和2的元素,并尝试类似于del somelist [0]然后跟着del somelist [2],第二条语句实际上会删除somelist[3]

我猜我可以总是先删除较高编号的元素,但我希望有更好的方法。


如果你关心效率,可以使用多个切片。 - tejasvi88
32个回答

0
我将所有内容整合到一个名为list_diff的函数中,该函数接受两个列表作为输入并返回它们的差异,同时保留第一个列表的原始顺序。
def list_diff(list_a, list_b, verbose=False):

    # returns a difference of list_a and list_b,
    # preserving the original order, unlike set-based solutions

    # get indices of elements to be excluded from list_a
    excl_ind = [i for i, x in enumerate(list_a) if x in list_b]
    if verbose:
        print(excl_ind)

    # filter out the excluded indices, producing a new list 
    new_list = [i for i in list_a if list_a.index(i) not in excl_ind]
    if verbose:
        print(new_list)

    return(new_list)

使用示例:

my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'woof']
# index = [0, 3, 6]

# define excluded names list
excl_names_list = ['woof', 'c']

list_diff(my_list, excl_names_list)
>> ['a', 'b', 'd', 'e', 'f']

-1

你也可以使用 remove。

delete_from_somelist = []
for i in [int(0), int(2)]:
     delete_from_somelist.append(somelist[i])
for j in delete_from_somelist:
     newlist = somelist.remove(j)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接