在Python中,当处理可迭代对象时,获取其包含元素的数量是一项常见的操作。本文将深入探讨如何使用Python的内置函数len()
来获取可迭代对象的长度,并介绍其相关应用。
Python提供了一系列内置的数据结构以及操作这些数据结构的方法。同时,还有一些内置函数在处理这些数据结构时非常有用。len()
函数就是其中之一,它可以返回可迭代对象中元素的个数。
本教程将详细讲解如何将len()
函数应用于列表、元组、字符串等不同的可迭代对象。此外,我们还会探讨一些常见的应用场景。
让我们开始吧!👩🏫
Python len()
函数的语法
len()
函数在Python中的语法如下:
len(iterable)
如你所见,len()
函数接收一个参数,该参数必须是一个有效的可迭代对象。可迭代对象通常是列表、元组或字符串,但也包括其他有效类型。
len()
函数的语法十分简洁。接下来,我们将通过一些例子来进一步了解它的用法。
📑 为了方便学习,你可以在Python REPL中运行本教程中的代码示例。
将len()
函数应用于可迭代对象
序列类型
你可以使用len()
函数来获取序列类型可迭代对象的长度,例如列表、元组和字符串。
以下是一些示例:
>>> nums = [9,3,6,1,2] >>> len(nums) 5 >>> nums_tup = (9,3,6,1,2) >>> len(nums_tup) 5
对于这些存储序列的数据结构,通常会使用索引来访问元素或获取子序列。
其他集合类型
len()
函数同样适用于其他Python集合类型,如集合和字典。
这些数据结构是无序集合。尽管你可能不关心元素的顺序,但了解集合中元素的总数仍然很有帮助。
>>> nums_set = set(nums) >>> len(nums_set) 5 >>> prices = {'Notebook':5,'Pencil case':7,'Bookmarks':3,'Pens':1,'Markers':8} >>> len(prices) 5
len()
函数的常见应用
目前为止,我们已经了解了如何使用len()
函数来获取可迭代对象中元素的数量。接下来,我们将探讨一些实际应用场景。
#1. 在for
循环中进行迭代
Python的for
循环提供了一种便捷的方式来遍历可迭代对象,语法为for item in iterable
。然而,如果你需要访问每个元素的索引,或者同时访问索引和元素,可以使用range()
函数,如下所示:
>>> nums = [9,2,4,7,8] >>> for i in range(len(nums)): ... print(f"Index {i}: {nums[i]}")
因为range(N)
生成一个从0到N-1的整数序列,使用range(len(nums))
可以得到一组有效的索引用于循环。
# 输出 Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
然而,Python推荐使用enumerate
函数来访问索引和元素,这是一种更简洁的方式:
>>> nums = [9,2,4,7,8] >>> for idx,num in enumerate(nums): ... print(f"Index {idx}: {num}")
# 输出 Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
#2. 在while
循环中作为条件
假设你有一个数字列表nums
。列表的pop()
方法可以删除列表中的最后一个元素并返回该元素。
只要nums
列表的长度(len(nums)
)大于零,就表示列表中至少有一个元素可以被删除。
>>> nums = [9,2,4,7,8] >>> while len(nums) > 0: ... nums.pop()
# 输出 8 7 4 2 9
上述示例等价于以下更简洁的写法:
>>> nums = [9,2,4,7,8] >>> while nums: ... nums.pop()
while nums:
的含义是“当nums
列表不为空时执行循环”。
#3. 检查和验证可迭代对象的长度
len()
函数的另一个常见用途是检查和验证某些可迭代对象的长度。
例如,我们可以使用len()
函数来检查用户名是否满足长度要求:
>>> username = "another-random-user" >>> if len(username) > 10: ... print("用户名过长,最多允许10个字符。") ... elif len(username) < 5: ... print("用户名过短,至少需要5个字符。") ... else: ... print("用户名有效!")
用户名过长,最多允许10个字符。
#4. 在列表和字典推导式中使用
Python中的推导式提供了一种简洁的语法,可以从现有可迭代对象构建新的可迭代对象。我们可以在推导式中使用内置函数。
列表推导式
在此列表推导式中,我们使用len()
函数来获取语言列表中每个字符串的长度。
>>> languages = ['Python','C','Rust','JavaScript'] >>> len_langs = [len(lang) for lang in languages] >>> len_langs [6, 1, 4, 10]
字典推导式
在此字典推导式中,我们使用语言列表和len()
函数来构建一个字典,其中键是语言名称,值是语言名称的长度:
>>> languages = ['Python','C','Rust','JavaScript'] >>> lang_len = {lang:len(lang) for lang in languages} >>> lang_len {'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}
这里,键和值分别是语言字符串及其长度。
#5. 自定义排序的key
参数
Python提供了内置的sort()
方法用于就地排序列表,以及sorted()
函数用于排序列表和其他可迭代对象。
在这两种情况下,都可以使用key
参数来自定义排序规则。
例如,我们可以根据字符串的长度对语言列表进行排序。
>>> languages = ['Python','C','Rust','JavaScript'] >>> languages.sort(key=len) >>> languages ['C', 'Rust', 'Python', 'JavaScript']
在下面的代码片段中,我们使用sorted()
函数来获取排序后的列表。
>>> languages = ['Hindi','English','German','French'] >>> sorted(languages,key=len) ['Hindi', 'German', 'French', 'English']
在这个例子中,“German”和“French”的长度都为6。由于sorted()
函数执行稳定排序,所以保留了它们在原始列表中的顺序。
#6. 获取NumPy数组的长度
len()
函数也可以用于获取其他数据结构的长度,例如NumPy数组。
>>> import numpy as np >>> np_array = np.array([3,4,6,9]) >>> type(np_array) <class 'numpy.ndarray'> >>> len(np_array) 4
在这个例子中,np_array
是一个包含4个元素的一维数组,因此len(np_array)
返回4,即数组中元素的数量。
矩阵是二维数组。
以下面的例子为例,len(np_array)
返回2,即行数。
>>> matrix = [[1,2,3],[4,5,6]] >>> np_array = np.array(matrix) >>> np_array array([[1, 2, 3], [4, 5, 6]]) >>> len(np_array) 2
为了更好地理解,让我们回到矩阵的概念。我们有一个嵌套的列表结构,其中外部列表包含两个嵌套列表。len()
函数返回容器中元素的数量,这里指的是两个列表。
>>> help(len) Help on built-in function len in module builtins: len(obj, /) Return the number of items in a container.
然而,当处理多维数组时,建议使用shape
属性来获取数组的维度信息。
>>> np_array.shape (2, 3)
使用len()
函数时需要避免的常见错误
在结束讨论之前,让我们回顾一下在Python中使用len()
函数时应该避免的一些常见错误。
将len()
函数用于不可迭代的数据类型
我们知道len()
函数只接受有效的可迭代对象作为参数。这意味着如果你尝试使用不可迭代的无效数据类型调用len()
函数,将会引发错误。
这些无效类型包括整数、浮点数和布尔值等基本数据类型:
>>> len(2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len() >>> len(True) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'bool' has no len() >>> len(3.14) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'float' has no len()
在Python中,生成器是一种节省内存的选择,尤其是在需要生成序列的场景下。生成器对象根据需要逐个返回序列的元素。但生成器对象没有长度。
因此,如果你尝试计算生成器对象的长度,将会引发错误:
>>> nums_sq = (i*i for i in range(10)) >>> nums_sq <generator object <genexpr> at 0x0157DBC0> >>> len(nums_sq) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'generator' has no len()
将len()
函数用于长度为1的元组
如果仅将一个元素放入元组中,Python会将其视为一个单独的元素,而不是一个元组。
这是一个示例:
>>> nums = (1) >>> len(nums) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len()
因此,当你的元组只有一个元素时,需要按照如下格式初始化它:tuple_name = (elt, )
,才能将其解释为一个元组:
>>> nums = (1,) >>> len(nums) 1
总结
以下是本教程的主要内容总结:
- 你可以使用Python中的
len()
函数来获取任意可迭代对象中元素的数量。len()
函数的语法是:len(任何有效的可迭代对象)
。 - 这包括列表、元组、字符串等序列,以及字典和集合等集合类型。
len()
函数常用于循环和推导式中。len()
函数还可以作为自定义排序的key
参数。例如,根据字符串的长度对字符串列表进行排序。
接下来,你可以学习如何使用Python的sum()
函数。