从列表中移除字符串
我有一个包含IP地址和DNS名称的字符串列表,我想要删除那些以“10.”开头的值。下面是一些示例数据:
['www.example.com','1.2.3.4','4.3.2.1','example.net','10.1.1.10','10.1.1.11',...]
我觉得这应该很简单,于是开始尝试以下方法:
for v in address:
test = re.match('(^\d+\.)',v)
if test:
if test.group(1) == '10.':
address.remove(v)
但是“10.”开头的地址没有被删除,尽管我没有收到任何错误信息(我还用“print address.remove(v)”进行了一些调试,结果每个“10.”地址都返回了“None”。这让我觉得正则表达式可能有问题,但在其他方面似乎是正常的。
所以我又试了试re.purge(),但这也没有帮助,我觉得这和我的问题没有关系。我还尝试用del address[...]来删除,但也没有成功。
我哪里出错了呢?
非常感谢你的关注。
4 个回答
1
你在这里犯的错误是,在遍历一个列表的同时又在修改这个列表。这就导致遍历的时候搞混了。
可以参考一下这个链接:在遍历时从列表中移除项目 - 这个做法有什么问题?,里面有一些正确做法的建议。
3
一种方法是使用 列表推导式 和 str.startswith()
来创建一个新的 list
。
>>> [a for a in address if not a.startswith('10.')]
['www.example.com', '1.2.3.4', '4.3.2.1', 'example.net', '...']
这样做可以避免使用正则表达式和 在遍历时删除项目,但会创建一个副本。
14
最简单的方法就是使用列表推导式:
filtered = [ v for v in address if not v.startswith('10.') ]