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
これは 意図的にこの方法で行われた ので、リスト、タプル、その他のコンテナタイプはすべてpublic .length()
メソッドを明示的に実装する必要はありません'magic' len()
メソッドを実装しているものすべての__len__()
をチェックしてください。
確かに、これは冗長に思えるかもしれませんが、長さチェックの実装は同じ言語の中でさえもかなり異なる可能性があります。あるコレクション型が.length()
メソッドを使用し、別の型が.length
プロパティを使用し、別の型が.count()
を使用することは珍しくありません。言語レベルのキーワードを使用すると、これらすべてのタイプのエントリポイントが統一されます。ですから、あなたが要素のリストであるとは考えていないかもしれないオブジェクトでも、まだ長さをチェックすることができます。これには、文字列、キュー、ツリーなどが含まれます。
len()
の機能的性質は、プログラミングの機能的スタイルにも適しています。
lengths = map(len, list_of_containers)
意味のある長さ(リスト、辞書、Tuple、stringなど)を取るには、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
関数への引数として渡すことです。内部的には、pythonは渡されたオブジェクトの特別な__len__
メソッドを呼び出そうとします。
Pythonは アヒルタイピング を使います:オブジェクトがであるかどうかは気にしません当面の状況に適したインタフェースを持っています。オブジェクトに対して組み込み関数len()を呼び出すときは、実際にはその内部の__len__メソッドを呼び出しています。カスタムオブジェクトはこのインタフェースを実装することができ、たとえオブジェクトが概念的にシーケンスでなくてもlen()は答えを返します。
インターフェースの完全なリストについては、こちらをご覧ください。 http://docs.python.org/reference/datamodel.html#basic-customization
Len(arr)を使ってください。
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
配列の長さを取得するには、前の回答で提案したようにlen(arr)
を使用できます。 2次元配列の大きさが必要な場合は、arr.shape
を使って高さと幅を返すことができます。
len(list_name)
関数はlistをパラメータとして受け取り、listの__len__()
関数を呼び出します。
Pythonは他の人が言ったように、一貫性のためにlen()
の代わりに__len__()
を使うことを勧めています。しかし、他にもいくつかの利点があります。
list
、str
、bytearray
などの組み込み型の場合、len()
のCython実装はショートカットを使用します。 Cの構造体で直接ob_size
を返すので、__len__()
を呼び出すよりも高速です。
このような詳細に興味があるなら、Luciano Ramalhoによる "Fluent Python"という本を読むことができます。そこにはたくさんの興味深い詳細があります、そしてあなたがより深くPythonを理解するのを助けるかもしれません。