我的问题是:
假设我有一个清单:
l=['asd1', 'jkl1', 'mno1', 'pqr2', 'stu2']
如何从列表中删除包含' 2'的所有项目?字符没有迭代列表?
答案 0 :(得分:2)
没有遍历列表?你根本做不到;你不能在O(n)
这里做任何更好的事情,你需要至少完成一次清单,找出要保留的项目和要删除的项目。列表理解会相对有效:
l = [i for i in l if '2' not in i]
唯一的例外是如果您有更多信息;如果您知道'2'
只会出现一次(或x
次),例如,您可以在找到第一个也是唯一一个出现时停止(尽管这样做无济于事在您的示例中,因为'2'
位于最后一项中。)
答案 1 :(得分:1)
您可以使用filter
过滤列表中的项目。
l=['asd1', 'jkl1', 'mno1', 'pqr2', 'stu2']
l = filter(lambda item: "2" not in item, l)
print l
结果:
['asd1', 'jkl1', 'mno1']
filter
的实现几乎肯定涉及迭代,但这对最终用户来说是不可见的,因此对您来说可能是令人满意的。
答案 2 :(得分:0)
你可以使用列表推导,但最后不管你要在列表中迭代什么
l=['asd1', 'jkl1', 'mno1', 'pqr2', 'stu2']
filt_char = '2'
new_list = [ x for x in l if filt_char not in x]