15

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

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

怎么了?

4

3 回答 3

29

您可以创建一个新列表,其中包含所有以您的前缀之一开头的单词:

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

您的代码不起作用的原因是该startswith方法返回一个布尔值,并且您要求从列表中删除该布尔值(但您的列表包含字符串,而不是布尔值)。

请注意,命名变量通常不是一个好主意list,因为这已经是预定义list类型的名称。

于 2014-04-30T22:36:19.073 回答
9

Greg 的解决方案肯定更 Pythonic,但在您的原始代码中,您的意思可能是这样的。请注意,我们制作了一个副本(使用list[:]语法)并迭代该副本,因为您不应该在迭代列表时修改它。

prefixes = ('hello', 'bye')
list = ['hi', 'helloyou', 'holla', 'byeyou', 'hellooooo']
for word in list[:]:
    if word.startswith(prefixes):
        list.remove(word)
print list
于 2014-04-30T22:37:23.200 回答
0
print len([i for i in os.listdir('/path/to/files') if not i.startswith(('.','~','#'))])
于 2015-06-01T18:42:15.070 回答