####はじめに
atcoderのチュートリアル問題的なやつでリストの各要素を偶数か奇数か判定しなければならないものがあったので、簡単に書けないかと思ってたらふつーに組み込み関数ありました。そのぐらい書けよって話かもしれませんが、せっかく用意されてるんだから使わせてください。
#####all(iterable)
iterable の全ての要素が真ならば (もしくは iterable が空ならば) True を返します。
def all(iterable):
for element in iterable:
if not element:
return False
return True
※公式ドキュメントより
ここでitarableとはなんなのか説明します。
######iterableとは?
反復可能なオブジェクト。要素を一回に一個返すオブジェクト。
ex)リスト、タプル、辞書 ・・・
iter()の引数にこいつを渡すとオブジェクトに対するiteratorを返します。
(iteratorとはデータの流れを表現するオブジェクトです(ざっくり))
例えば
for i in A:
ここでのAがitarableです。 for
ではiter()が自動的に呼び出され、一時的な無名の変数を作成してループを回している間iteratorを保持します。
ということでall
を試しましょう!
以下はall
を使った配列arrayの要素がすべてint型であるかを調べるプログラムです。
出力を見る前にどのようなものになるか考えてみてください!
def check(array):
if all( isinstance(x, int) for x in array):
print("配列{}の要素はすべてint型".format(array))
else:
print("配列{}の要素にint型ではないものが!!".format(array))
check([2,5,6])
check([1,4,[]])
check(["1",2,3])
check([])
check(1)
#####出力結果
配列[2, 5, 6]の要素はすべてint型
配列[1, 4, []]の要素にint型ではないものが!!
配列['1', 2, 3]の要素にint型ではないものが!!
配列[]の要素はすべてint型
TypeError Traceback (most recent call last)
<省略>
TypeError: 'int' object is not iterable
予想通りでしたか?空の配列に対してもTrueがかえってきていますね。
まあ当然ですが5つめはiterableではないというエラーが出てしまいました。
これらの点には注意しましょう。
#####any(iterable)
さてお次はany()
について書いていこうと思います。今更ですが、この2つの関数って内容が関数名のまんまだから説明の需要なさそう(笑)
iterable のいずれかの要素が真ならば True を返します。iterable が空なら False を返します。以下のコードと等価です:
def any(iterable):
for element in iterable:
if element:
return True
return False
※公式ドキュメントより
以下はany
を使った配列arrayの要素にint型があるかを調べるプログラムです。
先程と同様、出力を見る前にどのようなものになるか考えてみてください!
def check(array):
if any( isinstance(x, int) for x in array):
print("配列{}の要素にint型が!!".format(array))
else:
print("配列{}の要素にint型がまったくない!".format(array))
check([2,"5","6"])
check(["1","4","a"])
check([])
check([1])
####出力結果
配列[2, '5', '6']の要素にint型が!!
配列['1', '4', 'a']の要素にint型がまったくない!
配列[]の要素にint型がまったくない!
配列[1]の要素にint型が!!
どうでしたか?3番は特に注意ですね。all
とは違って空配列の場合False
が帰ってきていることが分かります。まあ、それ以外とくに説明することもないか。
###おわりに
いかがでしたでしょうか?解説とかそもそも需要なかった感も否めませんが、お役に立てれば幸いです。では今回はこの辺で!