如何使用删除顺序删除列表中的元素?
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]
我有一个像这样的列表 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]