全部成功?失敗?リストの中身で真偽判定する方法!!

takkun
どうも!たっくんです。
マイクラで溶岩ゴミ箱を家に作ったら全焼してしまいました(;・∀・)
これも醍醐味ですよね!!

Pythonには、「リスト」や「タプル」などの要素を元に、一括でTrue、Falseを調べることができる便利な関数があります!

リストなどに対して繰り返し処理して、TrueかFalseを調べるのはちょっと面倒くさいですよね、、、

そんな時!これをうまく使うと、すばやく繰り返し処理の前に弾いたり、受け取った結果を元にTrue、Falseを得ることができます!(*´ω`*)

all

allは、「リスト」や「タプル」などの要素が全て「True」になる時に「True」、1つでも「False」になる場合は「False」になります。

listData = [0, 1, 2, 3, 4]
print all(listData)
# False

この例では、「listData」に「0」があるので「False」判定になります。Pythonでは数値の「0」や「空のリスト」は「False」と判定されます(`・ω・´)ゞ

any

anyは、「リスト」や「タプル」などの要素が1つでも「True」になる時に「True」、全て「False」になる場合は「False」になります。

listData = [0, 1, 2, 3, 4]
print any(listData)
# True

この例では、「listData」に「0」がありますが、「1,2,3,4」があるので「True」判定になります。

こんな使い方を考えてみた

Mayaでツールを作っていると、繰り返し処理中にログを出してもどんどん流れていってしまいますよね、、、

終了後に全部成功した場合と、1つで失敗した場合に最後のメッセージを簡単に変更してみようと思います!

from maya import cmds, OpenMaya

def delete():
	# 実行結果の保存するリスト
	result = []
	
	# 選択の取得
	selection = cmds.ls(sl=True)
	
	# 繰り返し
	for node in selection:
		try:
			# ノードを削除
			cmds.delete(node)
			
			# 成功した結果をリストに保存
			result.append(True)
			
		except:
			# 削除できなかった旨をScript Editorに表示
			OpenMaya.MGlobal.displayError('Failed to delete %s' % node)
			
			# 失敗した結果をリストに保存
			result.append(False)
			
	
	# 実行結果に応じて終了メッセージを表示する
	# 全て成功していた場合
	if all(result):
		OpenMaya.MGlobal.displayInfo('Done!')
	
	# 1つでも失敗した場合
	elif any(result):
		OpenMaya.MGlobal.displayError('Please check log on Script Editor.')
	
	# 全部失敗した場合
	else:
		OpenMaya.MGlobal.displayError('OMG!! Please check user manual!!')
	
	return result

# 全部失敗した場合の例
# Error: Failed to delete pCube1 # 
# Error: Failed to delete pCube2 # 
# Error: OMG!! Please check user manual!! # 
	
# 失敗した場合の例
# Error: Failed to delete pCube1 # 
# Error: Please check log on Script Editor. # 

# 成功した場合の例
# Done! #