3
有时我在axes[0]
中有多个轴,有时候只有一个。因此,要遍历它/它们,我使用以下命令:如何在不知道对象是否可迭代的情况下迭代
for ax,_x in [(axes[0], X[0])] if len(X)==1 else zip(axes[0],X):
什么是惯用的方式做到这一点?
有时我在axes[0]
中有多个轴,有时候只有一个。因此,要遍历它/它们,我使用以下命令:如何在不知道对象是否可迭代的情况下迭代
for ax,_x in [(axes[0], X[0])] if len(X)==1 else zip(axes[0],X):
什么是惯用的方式做到这一点?
一般来说,最好的方法就是迭代。 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)]
如果你需要用更长的迭代所有的值工作,为短路一个的缺失值提供默认值,使用zip_longest
从itertools适当的fillvalue
:
>>> from itertools import zip_longest
>>> list(zip_longest(l, y, fillvalue=0))
[(1, 1), (2, 2), (3, 0)]
https://docs.python.org/3/glossary.html#term-eafp – jonrsharpe
'hasattr(轴[0], “__iter __”)'或'尝试/ except',也许? – jDo
你不需要检查长度,只需使用'zip(axes [0],X)'。但是,如果你的目标是创建列,当你不知道迭代的长度时,最好的方法是使用'itertools.zip_longest()'(如果你想保持所有的项目更长的迭代)其他明智的只是使用'zip '。 – Kasramvd