如何获取列表项中的元素数?
items = ["apple", "orange", "banana"]
# There are 3 items.
如何获取列表项中的元素数?
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友好长度属性的额外好处。
一如既往,您的里程数可能会有所不同。
其他回答
按照前面给出的示例回答您的问题:
items = []
items.append("apple")
items.append("orange")
items.append("banana")
print items.__len__()
虽然这可能不太有用,因为它作为“开箱即用”功能更有意义,但一个相当简单的方法是构建一个具有长度属性的类:
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()函数可以用于Python中的几种不同类型——内置类型和库类型。例如:
>>> len([1, 2, 3])
3
除了len之外,您还可以使用operator.length_hint(需要Python 3.4+)。对于普通列表,两者都是等效的,但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__方法总是更安全!
有三种方法可以找到列表中元素的长度。我将在这里比较这三种方法与性能分析。
方法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()是最好的选择。