值错误:list.remove(x):x不在lis中

2024-04-25 16:50:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

funds_是数据列表:

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

Tags: 数据代码in列表foroutremovelist
3条回答

我会这么做:

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

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

根据documentation,如果列表中不存在项,remove()将抛出错误。现在,您的代码遍历列表中的每个项,并尝试删除那些#s。由于不是每个项都是#,当列表用完#s时,remove()将抛出错误

试试这样的list comprehension

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

这将生成一个新列表,该列表由funds_U中不是u'#'的每个元素组成。

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

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

相关问题 更多 >