2009-09-05 160 views
0

我有一个列表filter = ['a','b','c']。我需要从列表中删除以下字符串 “item -a item -b item -c”。哪种做法最有效?通常情况下,列表过滤器包含100到200个项目,每个项目的长度都是100-150。这不会导致溢出吗?什么是支持的字符串的最大长度?字符串格式

+7

不要使用'filter'作为变量名称。 “filter”是一个Python函数。 – 2009-09-05 07:00:16

+0

很多东西都是Python内置的,所以现在很难不踩他们。它通常只影响它所在的​​代码块,所以不要试图记住每个内置函数名称,而只是避免你知道和使用的名称是合理的无害的,如果你错过了一个并且需要使用它,就可以稍后重命名变量。 – 2009-09-05 08:17:27

+1

真的没有那么多的内置函数。刚刚超过80个。 – 2009-09-05 08:50:43

回答

4

一个更清洁的方式来做到这一点:

filter = ['a', 'b', 'c'] 
" ".join(["item -%s" % val for val in filter]) 

这工作得很好,大型排列,例如。 filter = ['a'*1000] * 1000

+0

伟大的解决方案。谢谢 – Prabhu 2009-09-05 08:15:19

1

您可以使用join(我相信join是在Python 3.0一样):

>>> l = ['a','b','c'] 
>>> print ' item -'.join([''] + l) 
>>> ' item -a item -b item -c' 

>>> print ' item -'.join([''] + l).lstrip(' ') # eat the leading space 
>>> 'item -a item -b item -c' 
+0

会不会''item - '。join(l)'同样好用? – 2009-09-05 07:23:10

+0

您可能还想修剪掉结果中多余的空格。 – 2009-09-05 07:23:49

+1

@Dominic Rodger,是的,我们可以修剪领先空间。 '加入(l)'不会给出Prabhu想要的结果。该字符串将开始“一个项目...”而不是“项目-a ...” – 2009-09-05 07:36:37