[解決済み] pythonのany()関数は具体的にどのように動作するのでしょうか?
質問
の python docs ページで
any
に相当するコードは
any()
関数は次のように与えられます。
def any(iterable):
for element in iterable:
if element:
return True
return False
このフォームで呼び出した場合、この関数はどのように私がテストしたい要素を知ることができるのでしょうか?
any(x > 0 for x in list)
関数の定義からわかることは、イテレート可能なオブジェクトを渡していることです。どのように
for
ループは私が何かを探していることを知ることができます。
> 0
?
どのように解決するのですか?
もし
any(lst)
を見ると
lst
はイテラブルで、これはいくつかの項目のリストである。もしそれが
[0, False, '', 0.0, [], {}, None]
(というブーリアン値を持つ)。
False
というブール値を持つ)ならば
any(lst)
は
False
. もし
lst
が以下のいずれかを含んでいた場合
[-1, True, "X", 0.00001]
(これらは全て
True
と評価されます)、次に
any(lst)
は
True
.
投稿されたコードでは
x > 0 for x in lst
と呼ばれる別の種類の反復処理可能です。
ジェネレータ式
. ジェネレータ式がPythonに追加される前、あなたは
リスト内包
を作成していました。これは非常によく似ていますが、周囲に
[]
's:
[x > 0 for x in lst]
. から
lst
を含む
[-1, -2, 10, -4, 20]
を含むと、次のようになります。
理解されたリスト
:
[False, False, True, False, True]
. この内部値は
any
関数に渡され、その関数は
True
を返しますが、少なくとも一つの
True
の値があります。
しかし
ジェネレータ式
を使えば、Python はもうその内部リストを作成する必要はありません。
True(s)
と
False(s)
のように、値が生成されます。
any
関数はジェネレータ式で生成された値を一つずつ繰り返し処理します。
と
は、以下のように
any
が短絡しているため、最初の
True
の値を見た時点で停止します。これは、特に
lst
のようなものを使って
lst = range(-1,int(1e9))
(または
xrange
を使用している場合は
Python2.x
). この式で10億以上のエントリーが生成されるにもかかわらず
any
は3番目のエントリまでしか進みません。
1
と評価され
True
に対して
x>0
というように
any
を返すことができます。
True
.
もし、あなたが
リスト内包
を作ったとしたら、Python はまずメモリ上に 10 億要素のリストを作成し、それを
any
. しかし
ジェネレータ式
を使えば、Pythonの組み込み関数である
any
と
all
が発生すると同時に、早期にブレイクする。
True
または
False
の値が表示されます。
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Pythonの "at"(@)マークは何をするものですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] virtualenvsはどこに作成するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] 2つの弦をインターリーブさせる最もピトニックな方法