如何在Python中从列表中移除以指定前缀开头的字符串

17 投票
3 回答
35564 浏览
提问于 2025-04-18 04:57

我有一个字符串列表和一些前缀。我想把所有以这些前缀开头的字符串从列表中删除。我试过这样做:

prefixes = ('hello', 'bye')
list = ['hi', 'helloyou', 'holla', 'byeyou', 'hellooooo']
for word in list:
    list.remove(word.startswith(prexixes)

所以我希望我的新列表是:

list = ['hi', 'holla']

但是我遇到了这个错误:

ValueError: list.remove(x): x not in list

这是怎么回事呢?

3 个回答

0

在编程中,有时候我们会遇到一些问题,特别是在使用特定的工具或库时。比如,有人可能在使用某个库时,发现它的某些功能没有按预期工作。这种情况下,大家通常会在网上寻求帮助,比如在StackOverflow上提问。

提问时,最好能详细描述你遇到的问题,包括你使用的工具版本、你尝试过的解决办法,以及你期望的结果和实际的结果。这样,其他人才能更好地理解你的问题,并给出有效的建议。

此外,提供相关的代码片段也很重要,这样别人可以直接看到你是如何实现的,可能会更容易发现问题所在。

总之,清晰地表达你的问题和背景信息,可以大大提高你获得帮助的机会。

print len([i for i in os.listdir('/path/to/files') if not i.startswith(('.','~','#'))])
36

你可以创建一个新的列表,里面包含所有不以你指定的前缀开头的单词:

newlist = [x for x in list if not x.startswith(prefixes)]

你的代码之所以不工作,是因为 startswith 这个方法返回的是一个布尔值(也就是对或错),而你却想从你的列表中移除这个布尔值(但你的列表里是字符串,不是布尔值)。

另外,通常不建议把变量命名为 list,因为这个名字已经被用作预定义的 list 类型了。

9

Greg的解决方案确实更符合Python的风格,但在你原来的代码中,你可能想要的是这样的。注意我们是先复制了一份列表(使用list[:]的方式),然后在这份复制的列表上进行循环,因为在循环的时候不应该直接修改原来的列表。

prefixes = ('hello', 'bye')
list = ['hi', 'helloyou', 'holla', 'byeyou', 'hellooooo']
for word in list[:]:
    if word.startswith(prefixes):
        list.remove(word)
print list

撰写回答