回答:
my_list = [1,2,3,4,5]
len(my_list)
# 5
タプルでも同じように機能します。
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
そして、実際には単なる文字の配列である文字列:
my_string = 'hello world'
len(my_string)
# 11
それはして意図的にこの方法を行っているリスト、タプルや他のコンテナタイプまたはイテレート可能オブジェクトが明示的に公共実装するためのすべての必要はありませんでしたので、.length()
この方法ではなく、あなただけ確認することができ、len()
何もその道具「魔法」の__len__()
方法。
確かに、これは冗長に見えるかもしれませんが、長さチェックの実装は、同じ言語内でもかなり異なる場合があります。あるコレクション型が.length()
メソッドを使用しているときに、別の型が.length
プロパティを使用していて、別のコレクション型がメソッドを使用していることは珍しくありません.count()
。言語レベルのキーワードがあると、これらすべてのタイプのエントリポイントが統一されます。そのため、要素のリストと見なすことができないオブジェクトでも、長さをチェックすることができます。これには、文字列、キュー、ツリーなどが含まれます。
の機能的な性質はlen()
、プログラミングの関数スタイルにも適しています。
lengths = map(len, list_of_containers)
意味のあるもの(リスト、ディクショナリ、タプル、文字列など)を呼び出す方法はlen
、それを呼び出すことです。
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
「奇妙な」構文の理由は、内部的にpythonがに変換len(object)
されるためobject.__len__()
です。これはすべてのオブジェクトに適用されます。したがって、あるクラスを定義していて、それが長さを持つことが理にかなっている場合は、そのクラスで__len__()
メソッドを定義するだけでlen
、それらのインスタンスを呼び出すことができます。
Pythonはダックタイピングを使用します。当面の状況に適したインターフェースを備えていれば、オブジェクトが何であるかは問題ではありません。オブジェクトの組み込み関数len()を呼び出すと、実際にはその内部__len__メソッドが呼び出されます。カスタムオブジェクトはこのインターフェイスを実装でき、オブジェクトが概念的にシーケンスでない場合でも、len()は回答を返します。
インターフェイスの完全なリストについては、こちらをご覧ください:http : //docs.python.org/reference/datamodel.html#basic-customization
len(arr)
以前の回答で提案されているように使用して、配列の長さを取得できます。2D配列の次元が必要な場合は、arr.shape
高さと幅を返すことができます
Pythonは、他の人が言ったようlen()
に__len__()
、一貫性のためではなく、ユーザーが使用することを推奨しています。ただし、他にもいくつかの利点があります。
内蔵されたようなタイプのいくつかのためにlist
、str
、bytearray
ようにと、のCythonの実装では、len()
ショートカットを取ります。を直接ob_size
C構造体で返します__len__()
。これは、を呼び出すよりも高速です。
このような詳細に興味がある場合は、Luciano Ramalhoの「Fluent Python」という本を読んでください。その中には多くの興味深い詳細があり、Pythonをより深く理解するのに役立つかもしれません。