私がJavaScriptでそれができる状況に遭遇したとき、私はforeach
関数があればそれが便利だといつも思います。 foreachとは、次に説明する機能を意味します。
def foreach(fn,iterable):
for x in iterable:
fn(x)
それらはすべての要素に対してそれをするだけで、何かを生成したり返したりしませんでした。それは組み込み関数であるべきで、純粋なPythonでそれを書くよりも速いはずですそれは単に別の名前を呼んだのですか?
たぶん私は間違っていました、Pythonで関数を呼び出すのは高コストで、原因は間違いなくこの例には向いていません。 outループではなく、この関数は、本体の内側でループを実行する必要があります。これについては、多くのpythonのコード提案で既に説明しています。
def fn(*args):
for x in args:
dosomething
しかし私はforeachが2つの事実に基づく歓迎された基盤であると思いました:
私が見た「foreach」(PHP、C#、...)はすべてpythonsの「for」ステートメントと基本的に同じです。
これらは多かれ少なかれ同等です:
// PHP:
foreach ($array as $val) {
print($val);
}
// C#
foreach (String val in array) {
console.writeline(val);
}
// Python
for val in array:
print(val)
そう、はい、pythonには "foreach"があります。それは "for"と呼ばれます。
あなたが説明しているのは「配列マップ」関数です。これはpythonの リスト内包表記 で行うことができます。
names = ['tom', 'john', 'simon']
namesCapitalized = [capitalize(n) for n in names]
Pythonにはforeach
ステートメント自体はありません。それは言語に組み込まれたfor
ループを持っています。
for element in iterable:
operate(element)
本当にやりたければ、独自のforeach
関数を定義することができます。
def foreach(function, iterable):
for element in iterable:
function(element)
ちなみにfor element in iterable
構文は ABC プログラミング言語に由来します。これはPythonの影響の1つです。
その他の例
PythonのForeachループ:
array = ['a', 'b']
for value in array:
print(value)
# a
# b
Python For Loop:
array = ['a', 'b']
for index in range(len(array)):
print("index: %s | value: %s" % (index, array[index]))
# index: 0 | value: a
# index: 1 | value: b
map
は、質問に記載されている状況で使用できます。
例えば。
map(len, ['abcd','abc', 'a']) # 4 3 1
複数の引数を取る関数の場合は、さらに多くの引数をmapに指定できます。
map(pow, [2, 3], [4,2]) # 16 9
これはpython 2.xではリストを、python 3ではイテレータを返します。
あなたの関数が複数の引数を取り、その引数がタプルの形式のalready(またはPython 2.6以降で反復可能)の場合、 を使うことができます。 )itertools.starmap
。 (これはあなたが探していたものと非常によく似た構文を持っています)。イテレータを返します。
例えば。
for num in starmap(pow, [(2,3), (3,2)]):
print(num)
8と9
私があなたが正しいと理解したならば、あなたがあなたが関数 'func'を持っているなら、あなたはfunc(item)がtrueを返すならリストの各項目をチェックしたいということです。あなたがすべてのことに忠実になったら、それから何かをしなさい。
Allを使えます。
たとえば、リスト内の0〜10の範囲のすべての素数を取得します。
from math import sqrt
primes = [x for x in range(10) if x > 2 and all(x % i !=0 for i in range(2, int(sqrt(x)) + 1))]
これは、python 3でforeachを実行します
test = [0,1,2,3,4,5,6,7,8,"test"]
for fetch in test:
print(fetch)
この記事を見てください。 NumPy 1.6で導入されたnumpyパッケージのiteratorオブジェクトnditerは、1つ以上の要素すべてにアクセスするための多くの柔軟な方法を提供します。体系的な配列.
例:
import random
import numpy as np
ptrs = np.int32([[0, 0], [400, 0], [0, 400], [400, 400]])
for ptr in np.nditer(ptrs, op_flags=['readwrite']):
# apply random shift on 1 for each element of the matrix
ptr += random.choice([-1, 1])
print(ptrs)
d:\>python nditer.py
[[ -1 1]
[399 -1]
[ 1 399]
[399 401]]
もっと簡潔な構文を探しているのであれば、forループを1行に入れることができます。
array = ['a', 'b']
for value in array: print(value)
追加のステートメントはセミコロンで区切ります。
array = ['a', 'b']
for value in array: print(value); print('hello')
これはローカルのスタイルガイドには準拠していないかもしれませんが、コンソールで遊んでいるときはこのようにするのが理にかなっているかもしれません。