从列表中移除字符串

3 投票
4 回答
27474 浏览
提问于 2025-04-17 09:39

我有一个包含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.') ]

撰写回答