4

我的代码有什么问题,但我可以得到预期的结果。

我正在尝试删除列表中的所有“#”。

fund_U 是数据列表:

In [3]: funds_U
Out[3]: 
[u'#',
 u'#',
 u'MMFU_U',
 u'#',
 u'#',
 u'AAI_U',
 u'TGI_U',
 u'JAS_U',
 u'TAG_U',
 u'#',
 u'#',
 u'AAT_U',
 u'BGR_U',
 u'BNE_U',
 u'IGE_U',
 u'#',
 u'#',
 u'DGF_U',
 u'BHC_U',
 u'FCF_U',
 u'SHK_U',
 u'VCF_U',
 u'#',
 u'JEM_U',
 u'SBR_U',
 u'TEM_U',
 u'#',
 u'#',
 u'BAB_U',
 u'BGA_U',
 u'#']

以下是代码:

In [4]: for fund_U in funds_U[:]:
   ...:     funds_U.remove(u"#")
   ...:     

以下是错误:

ValueError                                Traceback (most recent call last)
<ipython-input-4-9aaa02e32e76> in <module>()
      1 for fund_U in funds_U[:]:
----> 2     funds_U.remove(u"#")
      3 

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

3 回答 3

8

根据文档,如果列表中不存在该项目,remove()则会引发错误。现在,您的代码遍历列表中的每个项目并尝试删除那么多#s。由于不是每个项目都是 a #remove()当列表用完#s 时会抛出错误。

尝试这样的列表理解

funds_U = [x for x in funds_U if x != u'#']

这将创建一个新列表,其中包含funds_Unot中的每个元素u'#'

于 2013-05-30T18:34:01.047 回答
6

我会这样做:

new = [item for item in funds_U if item!=u'#']

这是一个列表理解。它遍历funds_U 中的每个项目,如果不是,则将其添加到新列表中u'#'

于 2013-05-30T18:33:16.157 回答
1

这将修改原始对象,因此如果有其他变量指向同一个对象,那么它们的链接将保持不变。

FUNDS_U[:] = [x for x in FUNDS_U if x != "#"]
于 2013-05-30T18:33:42.337 回答