如何使用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)列表可能会更好,或者是以电子邮件为关键字的字典。