Is arr. len () preferowany sposób uzyskania długości tablicy w Pythonie?

W Pythonie , czy jest to jedyny sposób na uzyskanie liczby elementów?

arr.__len__()
Jeśli tak, to skąd ta dziwna składnia?
Author: smci, 2009-02-06

7 answers

my_list = [1,2,3,4,5]
len(my_list)
# 5

To samo działa dla krotek:

my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5

I ciągów, które są tak naprawdę tylko tablicami znaków:

my_string = 'hello world'
len(my_string)
# 11

To było celowo zrobione w ten sposób tak, że listy, krotki i inne typy kontenerów nie musiały jawnie implementować publicznej metody .length(), zamiast tego możesz po prostu sprawdzić len() wszystkiego, co implementuje metodę 'magic' __len__().

Jasne, może to wydawać się zbędne, ale implementacje kontroli długości mogą się znacznie różnić, nawet w tym samym języku. Często zdarza się, że jeden typ kolekcji używa metody .length(), podczas gdy inny typ używa właściwości .length, podczas gdy inny używa właściwości .count(). Posiadanie słowa kluczowego na poziomie języka jednoczy punkt wejścia dla wszystkich tych typów. Tak więc nawet obiekty, które mogą nie być listami elementów, mogą być nadal sprawdzane pod względem długości. Obejmuje to ciągi, kolejki, drzewa itp.

Funkcjonalny charakter len() dobrze nadaje się również do funkcjonalnych stylów programowania.

lengths = map(len, list_of_containers)
 1130
Author: Soviut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 18:22:14

Sposób, w jaki bierzesz długość czegokolwiek, co ma sens (lista, słownik, krotka, ciąg,...) jest wywołanie len na nim.

l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5

Powodem "dziwnej" składni jest to, że wewnętrznie python tłumaczy len(object) na object.__len__(). Dotyczy to każdego obiektu. Tak więc, jeśli definiujesz jakąś klasę i ma sens, aby miała ona Długość, po prostu zdefiniuj na niej metodę __len__(), a następnie można wywołać len na tych instancjach.

 48
Author: rz.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 23:59:45

Python używa pisanie kaczek : nie obchodzi go, czym jest obiekt , o ile ma odpowiedni interfejs do danej sytuacji. Kiedy wywołujesz wbudowaną funkcję len () na obiekcie, w rzeczywistości wywołujesz jego wewnętrzną metodę _ _ len__. Obiekt niestandardowy może zaimplementować ten interfejs i len () zwróci odpowiedź, nawet jeśli obiekt nie jest koncepcyjnie sekwencją.

Pełna lista interfejsów znajduje się tutaj: http://docs.python.org/reference/datamodel.html#basic-customization

 23
Author: UncleZeiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-06 09:15:37

Preferowanym sposobem uzyskania długości dowolnego obiektu Pythona jest przekazanie go jako argumentu do funkcji len. Wewnętrznie python spróbuje wywołać specjalną metodę __len__ obiektu, który został przekazany.

 22
Author: David Locke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-03 18:18:00

Wystarczy użyć len (arr):

>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
 19
Author: Tim Lesher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 21:30:05

Możesz użyć len(arr) jak sugerowano w poprzednich odpowiedziach, aby uzyskać długość tablicy. Jeśli chcesz podać wymiary tablicy 2D, możesz użyć arr.shape Zwraca wysokość i szerokość

 8
Author: Ahmed Abobakr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-20 01:10:57

len(list_name) funkcja przyjmuje list jako parametr i wywołuje funkcję __len__() list.

 7
Author: Harun ERGUL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 11:20:13