我的代码有什么问题,但我可以得到预期的结果.
我想删除列表中的所有"#".
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'#']
Run Code Online (Sandbox Code Playgroud)
以下是代码:
In [4]: for fund_U in funds_U[:]:
...: funds_U.remove(u"#")
...:
Run Code Online (Sandbox Code Playgroud)
以下是错误:
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
Run Code Online (Sandbox Code Playgroud)
根据文档,如果列表中不存在该项,remove()则会抛出错误.现在你的代码遍历列表中的每个项目并尝试删除那么多#s.由于并非每个项目都是a #,remove()因此当列表用完#s时会抛出错误.
尝试这样的列表理解:
funds_U = [x for x in funds_U if x != u'#']
Run Code Online (Sandbox Code Playgroud)
这将生成一个包含每个元素的一个新的列表funds_U,是不是u'#'.
我会这样做:
new = [item for item in funds_U if item!=u'#']
Run Code Online (Sandbox Code Playgroud)
这是列表理解.它遍历funds_U中的每个项目,如果不是,则将其添加到新列表中u'#'.