如何获取列表项中的元素数?

items = ["apple", "orange", "banana"]

# There are 3 items.

当前回答

为了完整性(主要是教育性的),可以不使用len()函数。我不会容忍这是一个很好的选择,不要在巨蟒身上这样编程,但它有助于学习算法。

def count(list):   # list is an iterable object but no type checking here!
    item_count = 0
    for item in list:
        item_count += 1
    return item_count

count([1,2,3,4,5])

(列表对象必须是可迭代的,由节中的for..暗示。)

对于新程序员来说,这里的教训是:如果不在某个时间点对项目进行计数,就无法获得列表中的项目数。问题变成了:什么时候是计算它们的好时机?例如,高性能代码,如套接字的connect系统调用(用C编写)connect(int sockfd,const struct sockaddr*addr,socklen_t addrlen);,不计算元素的长度(将该责任赋予调用代码)。请注意,地址的长度是为了保存首先计算长度的步骤而传递的?另一种选择是:在计算上,当您将项目添加到传递的对象中时,跟踪项目的数量可能是有意义的。请注意,这会占用更多的内存空间。看看Naftuli Kay的回答。

跟踪长度以提高性能同时占用更多内存空间的示例。注意,我从不使用len()函数,因为长度是跟踪的:

class MyList(object):
    def __init__(self):
        self._data = []
        self.length = 0 # length tracker that takes up memory but makes length op O(1) time
        

        # the implicit iterator in a list class
    def __iter__(self):
        for elem in self._data:
            yield elem
            
    def add(self, elem):
        self._data.append(elem)
        self.length += 1
            
    def remove(self, elem):
        self._data.remove(elem)
        self.length -= 1
            
mylist = MyList()
mylist.add(1)
mylist.add(2)
mylist.add(3)
print(mylist.length) # 3
mylist.remove(3)
print(mylist.length) # 2

其他回答

python中有一个名为len()的内置函数,在这些情况下会有所帮助。

>>> a = [1,2,3,4,5,6]
>>> len(a)  # Here the len() function counts the number of items in the list.
6

这在字符串的情况下会稍微不同:它计算字符。

>>> a = "Hello"
>>> len(a)
5

len()函数可以用于Python中的几种不同类型——内置类型和库类型。例如:

>>> len([1, 2, 3])
3

虽然这可能不太有用,因为它作为“开箱即用”功能更有意义,但一个相当简单的方法是构建一个具有长度属性的类:

class slist(list):
    @property
    def length(self):
        return len(self)

您可以这样使用:

>>> l = slist(range(10))
>>> l.length
10
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

本质上,它与列表对象完全相同,具有OOP友好长度属性的额外好处。

一如既往,您的里程数可能会有所不同。

为了完整性(主要是教育性的),可以不使用len()函数。我不会容忍这是一个很好的选择,不要在巨蟒身上这样编程,但它有助于学习算法。

def count(list):   # list is an iterable object but no type checking here!
    item_count = 0
    for item in list:
        item_count += 1
    return item_count

count([1,2,3,4,5])

(列表对象必须是可迭代的,由节中的for..暗示。)

对于新程序员来说,这里的教训是:如果不在某个时间点对项目进行计数,就无法获得列表中的项目数。问题变成了:什么时候是计算它们的好时机?例如,高性能代码,如套接字的connect系统调用(用C编写)connect(int sockfd,const struct sockaddr*addr,socklen_t addrlen);,不计算元素的长度(将该责任赋予调用代码)。请注意,地址的长度是为了保存首先计算长度的步骤而传递的?另一种选择是:在计算上,当您将项目添加到传递的对象中时,跟踪项目的数量可能是有意义的。请注意,这会占用更多的内存空间。看看Naftuli Kay的回答。

跟踪长度以提高性能同时占用更多内存空间的示例。注意,我从不使用len()函数,因为长度是跟踪的:

class MyList(object):
    def __init__(self):
        self._data = []
        self.length = 0 # length tracker that takes up memory but makes length op O(1) time
        

        # the implicit iterator in a list class
    def __iter__(self):
        for elem in self._data:
            yield elem
            
    def add(self, elem):
        self._data.append(elem)
        self.length += 1
            
    def remove(self, elem):
        self._data.remove(elem)
        self.length -= 1
            
mylist = MyList()
mylist.add(1)
mylist.add(2)
mylist.add(3)
print(mylist.length) # 3
mylist.remove(3)
print(mylist.length) # 2

您可以使用len()函数来查找python中可迭代项的长度。

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

len()函数还可以处理字符串:

my_string = "hello"
print(len(my_string))  # OUTPUT: 5

最后,len()可用于任何序列或集合(或定义__len__的任何大小的对象)。