请考虑以下事项:
items = []
items.append("apple")
items.append("orange")
items.append("banana")
# FAKE METHOD:
items.amount() # Should return 3
如何获取列表items
中的元素数量?
答案 0 :(得分:2482)
答案 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。
<强> 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 items
或if 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
。
我希望这会有所帮助。