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

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

# There are 3 items.

当前回答

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

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

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

其他回答

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

有三种方法可以找到列表中元素的长度。我将在这里比较这三种方法与性能分析。

方法1:使用len()

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

print(len(items))

输出:

3

方法2:使用Naive Counter方法

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

counter = 0
for i in items:
    counter = counter + 1

print(counter)

输出:

3

方法3:使用length_hint()

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

from operator import length_hint
list_len_hint = length_hint(items)
print(list_len_hint)

输出:

3

性能分析–Naive vs len()vs length_hint()

注意:为了进行比较,我将输入列表更改为一个大集合,该集合可以提供大量的时间差来比较方法。

items = list(range(100000000))

# Performance Analysis
from operator import length_hint
import time

# Finding length of list
# using loop
# Initializing counter

start_time_naive = time.time()
counter = 0
for i in items:
    # incrementing counter
    counter = counter + 1
end_time_naive = str(time.time() - start_time_naive)

# Finding length of list
# using len()
start_time_len = time.time()
list_len = len(items)
end_time_len = str(time.time() - start_time_len)

# Finding length of list
# using length_hint()
start_time_hint = time.time()
list_len_hint = length_hint(items)
end_time_hint = str(time.time() - start_time_hint)

# Printing Times of each
print("Time taken using naive method is : " + end_time_naive)
print("Time taken using len() is : " + end_time_len)
print("Time taken using length_hint() is : " + end_time_hint)

输出:

Time taken using naive method is : 7.536813735961914
Time taken using len() is : 0.0
Time taken using length_hint() is : 0.0

结论

可以清楚地看到,与其他两种方法相比,naive所花费的时间非常长,因此len()和length_hint()是最好的选择。

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

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

要获取任何顺序对象中的元素数,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

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

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

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