Является ли arr .__ len __ () предпочтительным способом получения длины массива в Python?

Не самый элегантный способ, но это сработало для меня:

var ms = date.substring(6, date.length - 2);
var newDate = formatDate(ms);


function formatDate(ms) {

    var date = new Date(parseInt(ms));
    var hour = date.getHours();
    var mins = date.getMinutes() + '';
    var time = "AM";

    // find time 
    if (hour >= 12) {
        time = "PM";
    }
    // fix hours format
    if (hour > 12) {
        hour -= 12;
    }
    else if (hour == 0) {
        hour = 12;
    }
    // fix minutes format
    if (mins.length == 1) {
        mins = "0" + mins;
    }
    // return formatted date time string
    return date.getMonth() + 1 + "/" + date.getDate() + "/" + date.getFullYear() + " " + hour + ":" + mins + " " + time;
}
697
задан smci 25 August 2018 в 02:21
поделиться

5 ответов

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(). Наличие ключевого слова уровня языка объединяет точку входа для всех этих типов. Таким образом, даже объекты, которые Вы не можете считать списками элементов, могли все еще быть проверены в длине. Это включает строки, очереди, деревья, и т.д.

, функциональная природа [1 110] также предоставляет себя хорошо функциональным стилям программирования.

lengths = map(len, list_of_containers)
1203
ответ дан Stevoisiak 25 August 2018 в 12:21
поделиться
  • 1
    Нет. То, независимо от того, что может быть выполнено от непривилегированного режима, будет сделано оттуда. It' s бессмысленный к контекстному переключению к привилегированному режиму для чего-то, что не является привилегированной операцией. – user502515 28 December 2010 в 05:27

Путем Вы берете длину чего-либо, для которого это имеет смысл (список, словарь, кортеж, строка...) должен звонить len на нем.

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

причина "странного" синтаксиса состоит в том, что внутренне Python переводит len(object) в object.__len__(). Это относится к любому объекту. Так, если Вы определяете некоторый класс, и имеет смысл для него иметь длину, просто определить __len__() метод на нем, и затем можно звонить len на тех экземплярах.

51
ответ дан nosklo 25 August 2018 в 12:21
поделиться
  • 1
    ха-ха я подразумевал, что сам сайт является медленным. – wkl 28 December 2010 в 05:23

Использование Python утка, вводящая : это не заботится о том, что объект , пока это имеет соответствующий интерфейс для ситуации под рукой. При вызове встроенной функции len () на объекте Вы на самом деле называете его внутреннее __ len __ метод. Пользовательский объект может реализовать этот интерфейс, и len () даст ответ, даже если объект не будет концептуально последовательностью.

Для полного списка интерфейсов, взгляните здесь: http://docs.python.org/reference/datamodel.html#basic-customization

23
ответ дан UncleZeiv 25 August 2018 в 12:21
поделиться
  • 1
    +1 для glibc sourceware ссылка, но ничего себе сайт является медленным прямо сейчас. (отредактированный) – wkl 28 December 2010 в 05:19

Предпочтительный способ получить длину любого объекта Python состоит в том, чтобы передать его как аргумент эти len функция. Внутренне, Python затем попытается назвать специальное предложение __len__ метод объекта, который был передан.

23
ответ дан David Locke 25 August 2018 в 12:21
поделиться

Просто используйте len (прибытие):

>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
21
ответ дан Tim Lesher 25 August 2018 в 12:21
поделиться
  • 1
    @Janus " The" Abramowitz является таким классиком... Я почти пролил несколько слез для основания, оно процитировало в ТАК... – Dr. belisarius 28 December 2010 в 14:39
Другие вопросы по тегам:

Похожие вопросы: