从列表中删除字符串

时间:2012-01-06 04:51:46

标签: python list

我有一个包含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)”进行了一些t-shooting,导致每个“10.”地址都为“无”。让我相信正则表达式是错了,但似乎除此之外还有其他工作。

所以我用re.purge()捅了一下 - 这也没有帮助,但不认为这是我问题的一个因素。我也尝试使用del地址[...]无济于事。

我哪里出错?

非常感谢你的关注。

4 个答案:

答案 0 :(得分:14)

简单的方法是使用列表推导:

filtered = [ v for v in address if not v.startswith('10.') ]

答案 1 :(得分:3)

一种方法是使用list comprehensionstr.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', '...']

这可以避免使用正则表达式和removing items during iteration,但会创建副本。

答案 2 :(得分:1)

您在这里做错了的是在更改列表时迭代列表。这意味着迭代会变得混乱。

有关如何正确执行此操作的一些建议,请参阅Removing Item From List - during iteration - what's wrong with this idiom?

答案 3 :(得分:1)

如果首先测试确实存在有问题的IP地址可能是有意义的。

否则10.some-cdn.some-mighty-corp.com将被过滤掉。

Related post