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

时间:2011-08-19 07:27:02

标签: python arrays

我想写一些从数组中删除特定元素的东西。我知道我必须for遍历数组才能找到与内容匹配的元素。

假设我有一系列电子邮件,我想摆脱匹配某些电子邮件字符串的元素。

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

以下是我的代码:

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

6 个答案:

答案 0 :(得分:145)

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

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

这将删除与字符串匹配的第一个出现。

编辑:编辑完成后,您仍然无需迭代。只是做:

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

答案 1 :(得分:11)

使用result = braintree.PaymentMethod.update("the_payment_method_token", { "payment_method_nonce": nonce_from_the_client, "options": { "verify_card": True, } }) filter()可以提供一种简洁明了的删除不需要的值的方法:

lambda

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

答案 2 :(得分:3)

这样做的理智方法是使用zip()和列表理解/生成器表达式:

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(),它们会为您提供列表,而不是数组。不一样。

答案 3 :(得分:3)

如果你需要for循环使用中的索引,你的for循环是不对的:

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

在您的情况下,Bogdan解决方案没问题,但您的数据结构选择并不是那么好。必须维护这两个列表,其中一个数据来自另一个与来自另一个相同索引的数据,这是笨拙的。

tupple(电子邮件,其他数据)列表可能更好,或者以电子邮件为密钥的dict。

答案 4 :(得分:1)

此问题还有另一种解决方案,它也可以处理重复的匹配。

我们从2个相等长度的列表开始:emailsotherarray。目标是从i的每个索引emails[i] == 'something@something.com'中删除两个列表中的项目。

这可以使用列表推导来实现,然后通过zip分割:

emails = ['abc@def.com', 'something@something.com', 'ghi@jkl.com']
otherarray = ['some', 'other', 'details']

from operator import itemgetter

res = [(i, j) for i, j in zip(emails, otherarray) if i!= 'something@something.com']
emails, otherarray = map(list, map(itemgetter(0, 1), zip(*res)))

print(emails)      # ['abc@def.com', 'ghi@jkl.com']
print(otherarray)  # ['some', 'details']

答案 5 :(得分:1)

如果要删除数组的索引:

使用array_name.pop(index_no。)

例如:-

>>> arr = [1,2,3,4]
>>> arr.pop(2)
>>>arr
[1,2,4]

如果要从数组中删除特定的字符串/元素,则

>>> arr1 = ['python3.6' , 'python2' ,'python3']
>>> arr1.remove('python2')
>>> arr1
['python3.6','python3']