python--文字リストの空の文字とNone要素を優雅に削除

5109 ワード

このコードは実は「廖雪峰公式サイト」のpythonにおける高次関数filterの使用で見たもので、当時学んだときはこの場所で長い間考えていたので、面白かったので、少し整理しました.
空の文字列を削除するコードは、次のとおりです.
def not_empty(s):
    return s and s.strip()

print(list(filter(not_empty, ['A', '', 'B', None,'C', '  '])))

  コードはとても简洁で、効果、Pythonオンラインツール|菜鸟教程まで走って见ることができて、とてもnice~しかし関数not_Emptyの戻り値は少し複雑で、よく分析することができます.
-      a b and   a and b:

	-        ,  a and b = b;

	-      None,       ,  '',  a and b = ''

	-        None,  a and b = None

  strip()関数自体はstrタイプに対して動作するため、s=Noneの場合、returns.strip()を1つ単独で使用すると「『NoneType』object has no attribute‘strip』」というエラーが表示されます.
ただし、s[]にNoneメンバーが含まれていないことを保証できれば、関数は直接書くこともできます.
def not_empty(s):
    return s.strip()

print(list(filter(not_empty, ['A', '', 'B', 'C', '  '])))

したがって、return s and s.strip()の役割は、s='''またはs='''しかし、なぜs=Noneの場合、return s and s.strip()はエラーを報告しないのでしょうか.なぜならand演算に関与するパラメータが前後からandをTrueにすることが不可能な場合、and演算は早期に終了し、python自体が解釈言語であるため、実行しながらチェックするためである.まだs and s.strip()のs.strip()まで運行されていないうちに運行が完了したという一言(虚晃一銃)は、当然間違いなく報告されます~
最後にlambda式を使用して、上記のプログラムをさらにカプセル化できます.
def str_Nempty(s):
	return list(filter(lambda s: s and s.strip(),s))

print(str_Nempty(['A', '', 'B', 'C', '  ']))

ゞ  刺激!ゞ