如何使用删除顺序删除列表中的元素?

How can i delete elements in a list with remove order?

我有一个像这样的列表 lst = [1,3,5] 和一个像 lost =['the' , 'cat' , 'thinks' , 'you' , 'are' , 'crazy' ]

这样的主要列表

我想根据第一个列表中的索引删除第二个列表中的元素。这意味着我必须删除 'cat' , 'you' 和 'crazy' .

问题是如果我使用:

lost.remove(lost[1])
lost.remove(lost[3])
lost.remove(lost[5])

第一个问题是它不会成功! 因为当我们删除第一个元素时,列表的长度(named lost)减少了 这样我们将删除错误的元素。

第二个问题是列表 named(lst) 并不总是 [1,3,5] 。它的长度会改变 在元素中。

我该如何解决这个问题?

每次从列表中删除一个元素,比如根据lost[i],遍历lost从i到最后,所有的值都减1。

您可以使用 list comprehension 解决它,如下所示:

lst = [1,3,5]
lost =['the' , 'cat' , 'thinks' , 'you' , 'are' , 'crazy' ]

print([ val for idx, val in enumerate(lost) if idx not in lst])

应该是:['the', 'thinks', 'are']希望对你有帮助

您创建的不是 {} 列表,而是集合。如果要创建列表,则需要使用 [] 字符。之后,您可以像这样从列表中删除元素:

indexes = {1,3,5}
lst = ['the' , 'cat' , 'thinks' , 'you' , 'are' , 'crazy']

lst_dct = dict(enumerate(lst))
for index in indexes:
    lst_dct.pop(index)

new_lst = list(lst_dct.values())

new_lst 现在将包含其余元素。

此外,您需要使用 pop 根据索引从列表中删除元素,而不是需要元素的 remove 函数。

您也可以使用带条件的列表理解。

lst = [1,3,5]
lost =['the' , 'cat' , 'thinks' , 'you' , 'are' , 'crazy' ]
copy_list=[lost[i] for i in range(len(lost)) if not i in lst]

作为@np8 ,你可以删除降序索引顺序的元素,如下所示:

lst = [1, 3, 5]
lost = ['the', 'cat', 'thinks', 'you', 'are', 'crazy']

for index in reversed(lst):  # descending index order
    del lost[index]

print(lost)

打印

['the', 'thinks', 'are']

更新(感谢@wwii for

如果给定的 lst 未按升序排序,您可以改为执行以下操作:

lst = [3, 1, 5]
lost = ['the', 'cat', 'thinks', 'you', 'are', 'crazy']

for index in sorted(lst, reverse=True):  # descending index order
    del lost[index]

如果 space 不是问题,您可以使用这个:

import numpy as np

lst = [1, 3, 5]
lost =['the' , 'cat' , 'thinks' , 'you' , 'are' , 'crazy' ]
output = np.delete(lost, lst).tolist()
print(output)

输出:

['the', 'thinks', 'are']

遍历索引 附加不需要的


new = [lost[i] for i in range(len(lost)) if i not in lst]