我有一张从网上刮下来的股票行情表,我正试图从中删除“n/a”值
以下是尝试删除值之前列表的一个片段:
ticker_list = ['BANR',
'AUB',
'HOPE',
'INDB',
'CVBF',
'FFBC',
'FRME',
'TRMK',
'n/a',
'n/a']
下面是我尝试运行以删除这些值的内容:
for x in ticker_list:
if x == 'n/a':
ticker_list.remove(x)
此代码部分有效。它会删除其中一个n/a值,从而导致:
['BANR',
'AUB',
'HOPE',
'INDB',
'CVBF',
'FFBC',
'FRME',
'TRMK',
'n/a']
我还尝试了以下方法:
for x in ticker_list:
if x.strip() == 'n/a':
ticker_list.remove(x)
还包括:
for x in ticker_list:
if 'n/a' in x.strip():
ticker_list.remove(x)
在所有情况下,我得到的结果都是一样的。它仅删除一个n/a值,但仍保留一个
这是某种编码的事情,还是我在做一些愚蠢的事情
非常感谢您的回复
问题是:在迭代时删除元素,这是一种“未定义的行为”
您可以通过列表压缩实现同样的效果:
这是因为它没有与序列一致的操作,因为它的支持迭代器可能会尝试移动到下一个值,并且它可能不再存在。例如:
list
删除将忽略最后一个元素:set
删除将引发运行时错误:在迭代过程中设置更改的大小李>dict
中删除将引发运行时错误:字典在迭代过程中更改了大小李>collections.deque
中删除将引发运行时错误:在迭代过程中deque发生了变化李>从所有这些中,只有
list
默默地失败Python docs还注意到,在迭代列表时更改列表是不安全的:相关问题 更多 >
编程相关推荐