当你不知道你的对象是否可以迭代时,如何迭代

时间:2016-07-01 19:49:28

标签: python python-3.x

有时我在axes[0]中有多个轴,有时只有一个。因此,为了迭代它/它们,我使用以下内容:

for ax,_x in [(axes[0], X[0])] if len(X)==1 else zip(axes[0],X):

这样做的惯用方法是什么?

1 个答案:

答案 0 :(得分:0)

一般来说,最好的方法就是迭代。 Don't ask for permission(使用if检查,而不是将其包装在try-except块中以处理“宽恕”案例。

正如其他人所评论的那样,如果X是一个大小为1但仍可迭代的列表,则不应创建不同的案例。如果您使用zip,它将以最短的可迭代次数停止:

>>> l = [1, 2, 3]    
>>> y = [1, 2]

>>> list(zip(l, y))
[(1, 1), (2, 2)]

如果您需要处理较长迭代的所有值并为短路的值提供缺省值,请使用来自itertools的zip_longest并使用适当的fillvalue

>>> from itertools import zip_longest

>>> list(zip_longest(l, y, fillvalue=0))
[(1, 1), (2, 2), (3, 0)]