如何使用python删除数组中的特定元素

我是Python新手,想写一些删除数组中特定元素的东西。 我知道我必须通过数组循环来查找与内容匹配的元素,但Python for循环有点有趣。

可以说,我有一个电子邮件数组,我想摆脱匹配一些电子邮件string的元素。

我实际上喜欢使用for循环结构,因为我需要为其他数组使用相同的索引。

这是我有的代码:

 for index, item in emails: if emails[index] == 'something@something.com': emails.pop(index) otherarray.pop(index) 

你不需要迭代数组。 只是:

 >>> x = ['ala@ala.com', 'bala@bala.com'] >>> x ['ala@ala.com', 'bala@bala.com'] >>> x.remove('ala@ala.com') >>> x ['bala@bala.com'] 

这将删除与string匹配的第一个匹配项。

编辑:编辑之后,你仍然不需要迭代。 做就是了:

 index = initial_list.index(item1) initial_list.remove(item1) other_list.remove(other_list[index]) 

使用filter()lambda将提供一个清除不需要的值的简洁方法:

 newEmails = list(filter(lambda x : x != 'something@something.com', emails)) 

这不会修改电子邮件。 它创build新的列表newEmails,其中只包含匿名函数返回True的元素。

这样做的理智方法是使用zip()和List Comprehension / Generator Expression:

 filtered = ( (email, other) for email, other in zip(emails, other_list) if email == 'something@something.com') new_emails, new_other_list = zip(*filtered) 

另外,如果你不使用array.array()numpy.array() ,那么你最有可能使用[]list() ,它给你列表,而不是数组。 不一样的事情。

你的循环是不正确的,如果你需要在循环使用索引:

 for index, item in enumerate(emails): # whatever (but you can't remove element while iterating) 

在你的情况下,波格丹解决scheme是好的,但你的数据结构select不是那么好。 不得不维护这两个列表中的数据,这些列表中的数据与另一个列表中的数据相关,这些数据很笨拙。

tupple(email,otherdata)列表可能会更好,或者是以电子邮件为关键字的字典。