如何在Python中获取列表中的元素数量?

时间:2009-11-11 00:30:55

标签: python list

请考虑以下事项:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

# FAKE METHOD:
items.amount()  # Should return 3

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

11 个答案:

答案 0 :(得分:2482)

len()函数可以与Python中的几种不同类型一起使用 - 包括内置类型和库类型。例如:

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

官方2.x文档在这里:len()
官方3.x文档在这里:len()

答案 1 :(得分:205)

  

如何获取列表的大小?

要查找列表的大小,请使用内置函数len

items = []
items.append("apple")
items.append("orange")
items.append("banana")

现在:

len(items)

返回3.

说明

Python中的所有内容都是一个对象,包括列表。所有对象在C实现中都有某种标题。

列表和其他类似的内置对象,其大小为""特别是在Python中,有一个名为ob_size的属性,其中缓存了对象中的元素数。因此,检查列表中的对象数量非常快。

但是,如果您要检查列表大小是否为零,请不要使用len - 而是put the list in a boolean context - it treated as False if empty, True otherwise

来自docs

<强> len(s)

  

返回对象的长度(项目数)。参数可以是序列(例如字符串,字节,元组,列表或范围)或   集合(例如字典,集合或冻结集)。

len通过数据模型docs中的__len__实施:

<强> object.__len__(self)

  

被调用以实现内置函数len()。应该返回对象的长度,整数&gt; = 0.另外,一个没有的对象   在Python 3中定义__nonzero__() [Python 2中的__bool__()]方法,其__len__()方法返回零   在布尔上下文中被认为是假的。

我们还可以看到__len__是一种列表方法:

items.__len__()

返回3.

内置类型,您可以获得len(长度)

事实上,我们看到我们可以获得所有描述类型的信息:

>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, 
                                            xrange, dict, set, frozenset))
True

不要使用len来测试空列表或非空列表

要测试特定长度,当然只需测试相等性:

if len(items) == required_length:
    ...

但是,测试零长度列表或反向列表的特殊情况。在这种情况下,不要测试是否相等。

另外,不要这样做:

if len(items): 
    ...

相反,只需:

if items:     # Then we have some items, not empty!
    ...

if not items: # Then we have an empty list!
    ...

explain why here但简而言之,if itemsif not items更具可读性和更高效。

答案 2 :(得分:71)

虽然这可能没有用,因为它更具有“开箱即用”功能,但是一个相当简单的黑客就是构建一个具有length属性的类:

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友好的length属性的额外好处。

与往常一样,您的里程可能会有所不同。

答案 3 :(得分:15)

除了len,您还可以使用operator.length_hint(需要Python 3.4+)。对于正常list,两者都是等价的,但length_hint可以获得列表迭代器的长度,这在某些情况下可能很有用:

>>> from operator import length_hint
>>> l = ["apple", "orange", "banana"]
>>> len(l)
3
>>> length_hint(l)
3

>>> list_iterator = iter(l)
>>> len(list_iterator)
TypeError: object of type 'list_iterator' has no len()
>>> length_hint(list_iterator)
3

length_hint根据定义只是一个“提示”,所以大部分时间len都更好。

我见过几个建议访问__len__的答案。在处理像list这样的内置类时这是可以的,但它可能会导致自定义类出现问题,因为len(和length_hint)会执行一些安全检查。例如,两者都不允许负长度或长度超过某个值(sys.maxsize值)。因此,使用len函数而不是__len__方法总是更安全!

答案 4 :(得分:7)

回答你的问题作为前面给出的例子:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

print items.__len__()

答案 5 :(得分:6)

为了完整起见,可以不使用len()函数(我不会认为这是一个很好的选择,不要像在PYTHON那样编程):

def count(list):
  item_count = 0
  for item in list[:]:
    item_count += 1
  return item_count

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

list[:]中的冒号是隐式的,因此也是可选的。)

新程序员的教训是:您无法在某个时刻获取列表中的项目数量。在计算上,最好在添加项目时跟踪项目数量。见Naftuli Kay的回答。

答案 6 :(得分:4)

要获取任何顺序对象中的元素数,Python 中的 goto 方法是 len(),例如。

a = range(1000) # range
b = 'abcdefghijklmnopqrstuvwxyz' # string
c = [10, 20, 30] # List
d = (30, 40, 50, 60, 70) # tuple
e = {11, 21, 31, 41} # set

len() 方法可以处理上述所有数据类型,因为它们是可迭代的,即您可以迭代它们。

all_var = [a, b, c, d, e] # All variables are stored to a list
for var in all_var:
    print(len(var))

len() 方法的粗略估计

def len(iterable, /):
    total = 0
    for i in iterable:
        total += 1
    return total

答案 7 :(得分:1)

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

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

输出:

>>> 6

对于字符串(如下所示),这将略有不同:

a="Hello"
print(len(a)) #Here the len() function counts the alphabets or characters in the list.

输出:

>>> 5

这是因为变量(a)是字符串而不是列表,所以它将计算字符串中的字符或字母数,然后打印输出。

答案 8 :(得分:1)

您可以使用 A = list(x = c(1,1,1,1), y = c(2,4,3,3)) # Expect warning that says `y` is bad! B = list(x = c(1,2,1,1), y = c(3,3,3,3)) # Expect warning that says `x` is bad! C = list(x = c(1,2,1,1), y = c(3,2,3,3)) # Expect warning that says `x` and `y` are bad! D = list(x = c(1,1,1,1), y = c(3,3,3,3)) # Expect no warning ! 函数在 Python 中查找可迭代对象的长度。

len()

`len()' 函数也适用于字符串:

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

总而言之,my_string = "hello" print(len(my_string)) # OUTPUT: 5 适用于任何序列或集合(或定义 len() 的任何大小的对象)。

答案 9 :(得分:0)

len()的实际工作方式而言,这是its C implementation

static PyObject *
builtin_len(PyObject *module, PyObject *obj)
/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
{
    Py_ssize_t res;

    res = PyObject_Size(obj);
    if (res < 0) {
        assert(PyErr_Occurred());
        return NULL;
    }
    return PyLong_FromSsize_t(res);
}

Py_ssize_t是对象可以具有的最大长度。 PyObject_Size()是一个返回对象大小的函数。如果无法确定对象的大小,则返回-1。在这种情况下,将执行以下代码块:

if (res < 0) {
        assert(PyErr_Occurred());
        return NULL;
    }

因此引发异常。否则,将执行以下代码块:

return PyLong_FromSsize_t(res);

res是一个C整数,将转换为python long并返回。自Python 3起,所有python整数都存储为longs

答案 10 :(得分:-2)

我已经通过使用函数来做到这一点:

#BLL
def count(lis):  #defining a function which takes an iterator(here list) as argument
    c=0           #assigning 0 value to a variable 'c'
    for i in lis:    #This for loop will run as many times as there are elements in the list/iterator
        c+=1       #incrementing value of c. So every time loop runs: 1 gets added  
                   #thus we find out how many times the loop runs:how many elements the loop has
    return c     #we return this value 
#PL
items = []
items.append("apple")
items.append("orange")
items.append("banana")
n=count(items)    #value c returned, is stored in n
print(n)

这将打印所需的输出3。 我希望这会有所帮助。