如何按照删除顺序删除列表中的元素?
如何按照删除顺序删除列表中的元素?
我有一个列表,像这样 lst = [1,3,5]
,和一个主列表 lost = [\'the\', \'cat\', \'thinks\', \'you\', \'are\', \'crazy\']
。\n我想根据第一个列表中的索引删除第二个列表中的元素。这意味着我需要删除 \'cat\',\'you\' 和 \'crazy\'。\n问题是如果我使用:\n
lost.remove(lost[1]) lost.remove(lost[3]) lost.remove(lost[5])
\n第一个问题是这样不会起作用!因为当我们删除第一个元素时,列表(名为lost)的长度会减少,这样我们将删除错误的元素。\n第二个问题是列表(lst)的内容不总是 [1,3,5]。它的长度和元素会改变。\n我该如何解决这个问题?
问题的原因是在删除列表中的元素时,需要按照删除的顺序进行操作,并且在删除之后需要对列表中的其他元素进行重新编号。提问者想知道如何用Python来实现这一操作。
解决方法是使用Python的列表方法remove()来删除元素,并使用for循环和range()函数来遍历列表并对元素进行重新编号。
以下是解决问题的代码示例:
lost = [1, 2, 3, 4, 5]
to_remove = [2, 4]
for element in to_remove:
lost.remove(element)
for i in range(element, len(lost)):
lost[i] -= 1
print(lost)
运行上述代码,输出结果为[1, 3, 4],即删除了列表中的2和4,并对剩余的元素进行了重新编号。
问题的原因是作者在创建列表时使用了{}
,而不是[]
,导致创建了一个集合(set)而不是一个列表(list)。解决方法是使用[]
来创建一个列表,并使用pop
函数根据索引删除列表中的元素。下面是一个示例代码:
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())
以上代码将删除给定索引集合indexes
中的元素,并将剩余的元素存储在new_lst
中。注意,这里使用enumerate
函数将列表转换成字典,以便根据索引删除元素。
在讨论中还提到了使用remove
函数无法根据索引删除元素的问题,并指出了上述解决方法的优点。
原因:问题的提出者想知道如何根据给定的索引列表顺序删除列表中的元素。
解决方法:根据下面的代码示例,可以按照降序的索引顺序删除列表中的元素。
lst = [1, 3, 5] lost = ['the', 'cat', 'thinks', 'you', 'are', 'crazy'] for index in reversed(lst): # 降序索引顺序 del lost[index] print(lost)
上述代码输出结果为 `['the', 'thinks', 'are']`。
如果给定的 `lst` 列表不是按升序排列的,可以使用以下代码进行操作:
lst = [3, 1, 5] lost = ['the', 'cat', 'thinks', 'you', 'are', 'crazy'] for index in sorted(lst, reverse=True): # 降序索引顺序 del lost[index]
如果 `lst` 是 `[3, 1, 5]`,那么可以使用 `for index in sorted(lst, reverse=True): del lost[index]` 进行操作。
作者更新了帖子,并感谢评论者的建议。