python跳过出错下一个循环_for循环中的tryexcept块跳过下一个迭代?

Python(和大多数语言)很可能会混淆,如果您在对列表使用迭代器的同时修改列表。在

这段代码就是这个问题的牺牲品,因为你修改的是你正在迭代的同一个列表。更常见的是构造一个新的列表作为输出。下面是一个例子:def yield_only_floats(l):

for s in l:

try:

float(s)

yield s

except ValueError:

pass

x = list(yield_only_floats(["1.115","","","4.3"]))

print x

得到['1.115','4.3']

如果要修改原始列表,仍可以执行以下操作:

^{pr2}$

但是,如果你真的想在迭代的同时修改你正在迭代的同一个列表,最好的方法是反向迭代:def leave_only_floats(l):

for i in xrange(len(l) - 1, -1, -1):

try:

float(l[i])

except ValueError:

del l[i]

x = ["1.115","","","4.3"]

leave_only_floats(x)

请注意,我还使用了位置删除,而不是值删除,这使得删除速度更快(不必再次搜索列表)

顺便说一句,你也可以考虑使用列表理解:def is_float(s):

try:

float(s)

return True

except ValueError:

return False

x = ["1.115","","","4.3"]

y = [s for s in x if is_float(s)]

就我个人而言,我认为对于这类问题,列表理解法是最具可读性的。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值