ValueError:list.remove(x):x不在列表中

时间:2013-05-30 18:28:45

标签: python

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

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

funds_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

3 个答案:

答案 0 :(得分:5)

我会这样做:

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

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

答案 1 :(得分:5)

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

尝试这样的list comprehension

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

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

答案 2 :(得分:1)

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

FUNDS_U[:] = [x for x in FUNDS_U if x != "#"]