使用 Python 可迭代对象时,查找可迭代对象包含的项数是一种常见操作。 了解如何使用 Python 的内置 len 来查找可迭代对象的长度等等。
Python 提供了一套内置数据结构和一组使用它们的方法。 此外,还有一些内置函数在处理这些数据结构时会派上用场。 其中一个函数是 len(),它给出可迭代对象中存在的项数。
在本教程中,我们将学习如何将 len() 函数与列表、元组、字符串等一起使用。 我们还将看到一些常见的用例。
让我们开始吧!👩🏫
目录
Python len() 函数的语法
以下是使用 Python len 函数的语法:
len(iterable)
正如所见,len() 函数需要一个参数,该参数是任何有效的可迭代对象。 可迭代对象通常是列表、元组或字符串之一。 但它也可以是任何其他有效类型。
我们看到使用 len() 函数的语法非常简单。 接下来,让我们继续编写一些示例。
📑 对于本教程中的代码示例,您可以在 Python REPL 中进行编码。
将 len() 函数与 Iterables 一起使用
带序列
您可以使用 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
Python len() 函数的常见用例
到目前为止,我们已经看到了使用 len() 函数获取可迭代对象中的项目数的简单示例。 现在让我们看看在实践中我们可以在哪里使用它。
#1. 使用 For 循环进行迭代
Python for 循环提供了一种结构,可以在 for an 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,1,2,…,N – 1,所以使用 range(len(nums)) 给出了要循环的有效索引集。
# Output Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
然而,推荐的 Pythonic 方式来访问索引和元素是使用 enumerate 函数:
>>> nums = [9,2,4,7,8] >>> for idx,num in enumerate(nums): ... print(f"Index {idx}: {num}")
# Output 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()
# Output 8 7 4 2 9
上面的示例是以下更明确的编写方式:
>>> nums = [9,2,4,7,8] >>> while nums: ... nums.pop()
while nums: 相当于条件“while nums 列表不为空”。
#3。 检查和验证可迭代的长度
len 函数的另一个常见用途是检查和验证某些可迭代对象的长度。
这里我们根据长度(使用 len() 函数计算)检查用户名是否是有效字符串:
>>> username = "another-random-user" >>> if len(username) > 10: ... print("Username too long; should be 10 characters long at max.") ... elif len(username) < 5: ... print("Username too short; should be at least 5 characters long.") ... else: ... print("Valid username!")
Username too long; should be 10 characters long at max.
#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。 自定义排序关键参数
Python 具有内置的 sort() 方法来对 Python 列表进行就地排序,并具有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']
在此示例中,“德语”和“法语”各有 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)
使用 Python 的 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(any-valid-iterable)。
- 这包括列表、元组和字符串等序列。 以及其他集合,例如词典和集合。
- len() 函数通常用于循环和推导式中。
- 当需要自定义按照长度排序时,也可以使用len()函数作为关键参数。 例如:根据字符串的长度对字符串列表进行排序。
接下来,学习如何使用Python的sum()函数。