我想写一些从数组中删除特定元素的东西。我知道我必须for
遍历数组才能找到与内容匹配的元素。
假设我有一系列电子邮件,我想摆脱匹配某些电子邮件字符串的元素。
我实际上想使用for循环结构,因为我需要为其他数组使用相同的索引。
以下是我的代码:
for index, item in emails:
if emails[index] == 'something@something.com':
emails.pop(index)
otherarray.pop(index)
答案 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个相等长度的列表开始:emails
,otherarray
。目标是从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']