我想写一些从数组中删除特定元素的东西.我知道我必须for遍历数组才能找到与内容匹配的元素.
假设我有一系列电子邮件,我想摆脱匹配某些电子邮件字符串的元素.
我实际上想使用for循环结构,因为我也需要为其他数组使用相同的索引.
这是我的代码:
for index, item in emails:
if emails[index] == 'something@something.com':
emails.pop(index)
otherarray.pop(index)
Run Code Online (Sandbox Code Playgroud)
Bog*_*dan 160
您不需要迭代数组.只是:
>>> x = ['ala@ala.com', 'bala@bala.com']
>>> x
['ala@ala.com', 'bala@bala.com']
>>> x.remove('ala@ala.com')
>>> x
['bala@bala.com']
Run Code Online (Sandbox Code Playgroud)
这将删除与字符串匹配的第一个出现.
编辑:编辑后,您仍然不需要迭代.做就是了:
index = initial_list.index(item1)
del initial_list[index]
del other_list[index]
Run Code Online (Sandbox Code Playgroud)
Ron*_*ian 11
使用filter()和lambda将提供一个简洁明了的方法来删除不需要的值:
newEmails = list(filter(lambda x : x != 'something@something.com', emails))
Run Code Online (Sandbox Code Playgroud)
这不会修改电子邮件.它创建新列表newEmails,其中仅包含匿名函数返回True的元素.
您的 for 循环不正确,如果您需要 for 循环中的索引,请使用:
for index, item in enumerate(emails):
# whatever (but you can't remove element while iterating)
Run Code Online (Sandbox Code Playgroud)
在您的情况下,Bogdan 解决方案还可以,但是您的数据结构选择不太好。必须使用来自同一索引的另一个列表的数据来维护这两个列表是笨拙的。
元组列表(电子邮件,其他数据)可能更好,或者以电子邮件为键的字典。
| 归档时间: |
|
| 查看次数: |
408294 次 |
| 最近记录: |