2016-07-01 10 views
3

時々、複数の軸がaxes[0]にあり、時には1つしかない場合があります。だから、それ/それらを反復するために、私は次のようにします。オブジェクトが反復可能かどうかわからないときの反復方法

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

これを行うための慣用的な方法は何ですか?

+0

https://docs.python.org/3/glossary.html#term-eafpを – jonrsharpe

+0

'はhasattr(軸[0]、 "__iter __")'や 'てみてください/ except'、多分? – jDo

+2

'zip(axes [0]、X)'だけで長さをチェックする必要はありません。しかし、あなたの目的が列を作成しているときに、iterablesの長さを認識していないときには、itertools.zip_longest()を使用することが最善の方法です(もっと長いiterableからすべての項目を保持したい場合) '。 – Kasramvd

答えて

0

一般に、最良の方法は反復することです。 Don't ask for permissionifチェックして、むしろ「赦し」のケースを処理するためのtry-exceptブロックでラップ。

他の人がいるがコメントしたようにXがまだあるサイズ1のリストであれば、あなたは別の例を作成しないでくださいあなたが長いのiterableの全ての値で動作し、短絡1の欠損値のデフォルトを提供し、とitertoolsからzip_longestを使用する必要がある場合

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

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

:あなたはzipを使用している場合は反復可能それが最短のiterableで停止します適切なfillvalue

>>> from itertools import zip_longest 

>>> list(zip_longest(l, y, fillvalue=0)) 
[(1, 1), (2, 2), (3, 0)] 
関連する問題