[解決済み] Pythonで、あるオブジェクトが反復可能かどうかを判断するにはどうしたらいいですか?
質問
のようなメソッドはありますか?
isiterable
? 今のところ、私が見つけた唯一の解決法は
hasattr(myObj, '__iter__')
でも、これがどれだけフールプルーフなのかはわかりません。
解決方法は?
-
を確認する
__iter__
はシーケンス型では動作しますが、文字列などでは失敗します。 Python 2では . 私も正しい答えを知りたいのですが、それまでは、ここに1つの可能性があります(文字列でも動作するでしょう)。from __future__ import print_function try: some_object_iterator = iter(some_object) except TypeError as te: print(some_object, 'is not iterable')
は
iter
をチェックする組み込みの__iter__
メソッド、文字列の場合は__getitem__
メソッドを使用します。 -
もうひとつの一般的な Pythonic なアプローチは、反復可能なオブジェクトを想定し、それが与えられたオブジェクトで動作しない場合は優雅に失敗することです。Pythonの用語集を参照してください。
<ブロッククオートPythonicなプログラミングスタイルで、オブジェクトの型を、ある型オブジェクトとの明示的な関係ではなく、そのメソッドや属性のシグネチャの検査によって決定する("If it looks like a type object. ダック のように鳴き ダック でなければならない。 ダック .") 特定の型よりもインターフェイスを重視することで、多相代入を可能にし、優れた設計のコードはその柔軟性を向上させます。Duck-typingはtype()やisinstance()を使ったテストを回避することができます。 その代わり、EAFP(Easier to Ask Forgiveness than Permission)スタイルのプログラミングを採用するのが一般的である。
...
try: _ = (e for e in my_object) except TypeError: print my_object, 'is not iterable'
-
は
collections
モジュールはいくつかの抽象的な基底クラスを提供し、例えば特定の機能を提供しているかどうかをクラスやインスタンスに尋ねることができます。from collections.abc import Iterable if isinstance(e, Iterable): # e is iterable
ただし、この方法では
__getitem__
.
関連
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】Pythonのvirtualenvを離脱/終了/無効化する方法
-
[解決済み] リストを均等な大きさのチャンクに分割するにはどうしたらいいですか?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python jiabaライブラリの使用方法について説明
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み] ある文字列が文字列のリストの項目の部分文字列であるかどうかを確認する方法は?
-
[解決済み] Pythonでオブジェクトがジェネレータオブジェクトであるかどうかを確認する方法は?