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

Python 如何使用删除顺序删除列表中的元素?,python,python-3.x,list,maxlength,Python,Python 3.x,List,Maxlength,我有一个像这样的列表lst=[1,3,5],还有一个像lost=['the','cat','thinks','you','are','crazy'] 我想根据第一个列表中的索引删除第二个列表中的元素。这意味着我必须删除“猫”、“你”和“疯狂” 问题是如果我使用: lost.remove(lost[1]) lost.remove(lost[3]) lost.remove(lost[5]) 第一个问题是它不会成功! 因为当我们删除第一个元素时,列表(名为lost)的长度会减少 这样我们就可以消除错

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

我想根据第一个列表中的索引删除第二个列表中的元素。这意味着我必须删除“猫”、“你”和“疯狂”

问题是如果我使用:

lost.remove(lost[1])
lost.remove(lost[3])
lost.remove(lost[5])
第一个问题是它不会成功! 因为当我们删除第一个元素时,列表(名为lost)的长度会减少 这样我们就可以消除错误的因素

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


如何解决此问题?

每次您从列表中删除一个元素时,例如根据lost[i],遍历lost从i到结尾,并将所有值递减1。

您可以使用
列表理解
解决此问题,如下所示:

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']
希望能帮助你

你不是在用
{}
创建一个列表,而是一个集合。如果要创建列表,需要使用
[]
字符。之后,您可以从列表中删除元素,如下所示:

index={1,3,5}
lst=[“猫”,“想”,“你”,“是”,“疯了”]
lst_dct=dict(枚举(lst))
对于索引中的索引:
lst_dct.pop(索引)
新建\u lst=list(lst\u dct.values())
新的\u lst
现在将包含剩余的元素


另外,除了需要元素的
remove
功能外,您还需要使用
pop
从基于索引的列表中删除和元素。

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

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]
如图所示,您可以按索引降序删除元素,如下所示:

lst=[1,3,5]
迷失=[“猫”,“想”,“你”,“是”,“疯了”]
对于反向索引(lst):#索引降序
del丢失[索引]
打印(丢失)
哪张照片

['the','think','are']

更新(感谢您的支持)

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

lst=[3,1,5]
迷失=[“猫”,“想”,“你”,“是”,“疯了”]
对于已排序的索引(lst,reverse=True):#索引降序
del丢失[索引]

如果空间不是问题,您可以使用:

将numpy导入为np
lst=[1,3,5]
迷失=[“猫”,“想”,“你”,“是”,“疯了”]
output=np.delete(lost,lst).tolist()
打印(输出)
输出:

['the', 'thinks', 'are']
循环索引 附加那些不是必需的


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




按索引降序删除元素:5、3、1您的解决方案与OP试图解决的问题相同。@wwii您是对的,我相应地更改了答案您的解决方案是否特别有效,因为它是列表理解还是for循环有效?它之所以有效是因为它创建了一个新列表,而不是从原始列表中删除项目吗?它也可以与循环
一起工作,但您可以在一行代码中解决它。主要原因是,当你想按索引删除项目时,你会遇到麻烦,因为长度列表每次都会改变。你能用for循环吗?还是因为它是一个列表理解功能而特别有效?@wwii它也可以用于循环,只是写起来会更长!底层的列表理解实现了循环并使代码可读。如果
lst=[3,1,5]
?@wwii lol,我甚至没想到!谢谢你的评论!然后,
用于排序中的索引(lst,reverse=True):可以使用del lost[index]
。@wwii I更新了我的帖子。再次感谢!我如何使用python实现这一点?更好的方法是:像这样使用
enumerate
new=[word for index,word in enumerate(lost)if index not in lst]
。如果
lst
很大,您可能需要首先对其进行
设置
,以加快速度。