Python enumerate() 函数解释及示例 在 Python 中,enumerate() 函数用于将一个可迭代对象(如列表、元组或字符串)组合为一个索引序列,同时返回索引和对应的元素值。 下面是一些使用enumerate()函数的示例: 示例1:对列表进行枚举 “` fruits = [‘apple’, ‘banana’, ‘orange’] for index, fruit in enumerate(fruits): print(index, fruit) “` 输出: “` 0 apple 1 banana 2 orange “` 示例2:对字符串进行枚举 “` string = ‘hello’ for index, char in enumerate(string): print(index, char) “` 输出: “` 0 h 1 e 2 l 3 l 4 o “` 通过使用enumerate()函数,我们可以方便地获得列表或字符串中每个元素的索引和值。

这个教程将教你如何在python中使用enumerate() 函数。

python中的enumerate()函数提供了一种简洁的语法来访问可迭代对象中的项以及它们的索引。

我们先回顾一下如何使用简单循环来访问项和索引,然后再学习python的enumerate()函数的语法。我们还会沿途编写代码示例。

让我们开始吧。

如何在python中使用for循环进行迭代

任何可以迭代并访问单个项的python对象都被称为可迭代对象。因此,python的列表、元组、字典和字符串都是可迭代对象。

让我们以下面代码单元格中定义的购物清单为例。

shopping_list = ["水果","饼干","谷物","蛋白棒","便签"]

在python中,你可以使用for循环来遍历任何可迭代对象。代码如下:

for item in :
    # 对item进行操作

# item: 循环变量
# : 任何python可迭代对象:列表、元组、字典、字符串等等。

现在,使用这个语法,让我们遍历shopping_list并访问单个项。

for item in shopping_list:
  print(item)

# 输出
水果
饼干
谷物
蛋白棒
便签

使用这种结构可以直接访问项。然而,有时你可能需要访问项的索引,除了访问项本身。

你可以使用一个index变量,你可以在循环体内递增它,如下所示:

index = 0
for item in shopping_list:
  print(f"索引:{index}, {item}")
  index += 1

# 输出
索引:0, 水果
索引:1, 饼干
索引:2, 谷物
索引:3, 蛋白棒
索引:4, 便签

但这并不是最有效的方法。如果你忘记递增索引,你的代码将无法按预期工作。

index = 0
for item in shopping_list:
  print(f"索引:{index}, {item}")
  # 在循环体内不更新索引
  # 索引从未更新,始终为0

# 输出
索引:0, 水果
索引:0, 饼干
索引:0, 谷物
索引:0, 蛋白棒
索引:0, 便签

使用for循环的另一种常见模式是与range()函数结合使用。我们将在下一节学习关于这个的知识。

如何使用range()函数访问索引

python内置的len()函数返回任何python对象的长度。因此,你可以调用len()函数并将shopping_list作为参数来获取shopping_list的长度(在本例中为5)。

len(shopping_list)
# 输出: 5

range()函数返回一个范围对象,你可以在循环中使用它。当你循环遍历range(stop)时,你会得到索引0、1、2、…、stop-1。

通过设置stop = len(list),你可以获得有效索引列表。所以通过使用range()函数,你可以访问索引以及相应的项,如下所示。

for index in range(len(shopping_list)):
  print(f"index:{index}, item: {shopping_list[index]}")

# 输出
index:0, item: fruits
index:1, item: cookies
index:2, item: cereals
index:3, item: protein bars
index:4, item: post-it notes

然而,这不是推荐的pythonic方式来同时访问索引和项。

python enumerate() 函数的语法

python 的 enumerate() 函数允许您使用以下通用语法访问项及其索引:

enumerate(, start = 0)

在上述语法中:

  • 是一个 必需 参数,它可以是任何 python 可迭代对象,如列表或元组。
  • start 是一个可选参数,用于控制计数开始的索引。如果不指定 start 的值,则默认为零。

现在您可以使用 shopping_list 调用 enumerate() 函数,它会返回一个枚举对象,如下面的代码单元格所示。

enumerate(shopping_list)

您无法遍历 enumerate 对象。因此,让我们将 enumerate 对象转换为 python 列表。

list(enumerate(shopping_list))

# 输出
[(0, 'fruits'),
 (1, 'cookies'),
 (2, 'cereals'),
 (3, 'protein bars'),
 (4, 'post-it notes')]

访问 enumerate 对象的另一种方法是使用 next() 函数调用 enumerate 对象作为参数。在 python 中,next() 函数返回迭代器的下一项。

内部上,next() 函数通过调用迭代器对象上的 __next__ 方法来检索连续的项。

让我们将枚举对象分配给变量 shopping_list_enum

shopping_list_enum = enumerate(shopping_list)

当您首次调用 next() 时,使用 shopping_list_enum,您将获得索引零和索引 0 上的项:元组 (0, 'fruits')

当您继续调用 next() 函数时,您将获得连续的项及其索引,如下所述。

next(shopping_list_enum)
# (0, 'fruits')
next(shopping_list_enum)
# (1, 'cookies')
next(shopping_list_enum)
# (2, 'cereals')
next(shopping_list_enum)
# (3, 'protein bars')
next(shopping_list_enum)
# (4, 'post-it notes')

如果在访问所有项并到达列表末尾后调用 next() 函数会发生什么?您将获得一个 stopiteration error

next(shopping_list_enum)
# ---------------------------------------------------------------------------
stopiteration                             traceback (most recent call last)
 in ()
----> 1 next(shopping_list_enum)

stopiteration:

枚举函数enumerate()仅在需要时返回连续的索引和项,并且不会提前计算。在需要考虑内存效率的python项目中,当需要循环遍历大型可迭代对象时,可以尝试使用enumerate()函数。

python enumerate()函数示例

现在我们已经学会了使用enumerate()函数的语法,让我们修改之前的for循环。

从前一节中,我们知道循环遍历枚举对象会返回一个包含索引和项的元组。我们可以将这个元组解包成两个变量:indexitem

for index, item in enumerate(shopping_list):
  print(f"index:{index}, item:{item}")

# 输出
index:0, item:fruits
index:1, item:cookies
index:2, item:cereals
index:3, item:protein bars
index:4, item:post-it notes

接下来,让我们看看如何指定自定义起始值。

如何使用自定义的起始值来枚举()

python使用零索引,所以默认情况下start值为0。然而,如果你需要以人类可读的形式获得索引,例如从1或任何你选择的索引开始,你可以指定一个自定义的start值。

shopping_list示例中,如果你想从1开始计数,设置start = 1

for index, item in enumerate(shopping_list,1):
  print(f"index:{index}, item:{item}")

# 输出
index:1, item:fruits
index:2, item:cookies
index:3, item:cereals
index:4, item:protein bars
index:5, item:post-it notes

然而,当指定自定义起始值时,你应该确保将它作为第二个位置参数指定。

如果你错误地交换了可迭代对象和起始值的顺序,你将遇到一个错误,如下面的代码单元格所示。

for index, item in enumerate(1,shopping_list):
  print(f"index:{index}, item:{item}")

# 输出
---------------------------------------------------------------------------
typeerror                                 traceback (most recent call last)
 in ()
----> 1 for index, item in enumerate(1,shopping_list):
      2   print(f"index:{index}, item:{item}")

typeerror: 'list' object cannot be interpreted as an integer

为了避免这样的错误,你可以将start指定为关键字参数,如下所示。

for index, item in enumerate(shopping_list, start = 1):
  print(f"index:{index}, item:{item}")

# 输出
index:1, item:fruits
index:2, item:cookies
index:3, item:cereals
index:4, item:protein bars
index:5, item:post-it notes

到目前为止,你已经学会了如何在python列表中使用enumerate()函数。你还可以使用这个函数循环遍历python字符串、字典和元组。

如何在python元组中使用enumerate()函数

假设shopping_list是一个元组。在python中,元组也是集合,类似于python列表,但它们是不可变的。因此,你不能修改它们,尝试这样做将导致错误。

下面的代码片段将shopping_list初始化为一个元组。

如果您尝试修改元组中的第一个项目,您将会得到一个错误,因为python元组是一个不可变的集合。

现在,运行以下代码片段以验证enumerate()函数与元组的预期工作方式。

购物清单 =(“水果”,“饼干”,“谷物”,“蛋白棒”,“便笺”)
为索引,项目在枚举(购物清单)中:
打印(f“索引:{索引},项目:{项目}”)

如何在python字符串中使用enumerate()函数

您还可以使用python的enumerate()函数循环遍历字符串并同时访问字符和索引。

下面是一个例子。

py_str = ‘蝴蝶'
为索引,字符在枚举(py_str)中:
打印(f“索引{索引}:{字符}”)

从上面的输出中,我们可以看到字符及其索引(0-8)已打印出来。

结论

以下是您所学到的内容的总结。

您可以使用for循环访问项目并保持单独的计数器或索引变量。
如果您愿意,您可以使用range()函数获取有效的索引,并通过索引进入列表来访问项目。
作为推荐的pythonic方式,您可以使用python的enumerate()函数,语法为:enumerate(iterable)。默认情况下,计数或索引从0开始。
您可以使用语法enumerate(iterable, start)指定自定义开始值,以从值start开始获取索引和相应的项目。
在处理元组、字符串、字典以及一般情况下的任何python可迭代对象时,都可以使用enumerate函数。

我希望您会觉得这篇关于enumerate()函数的教程有帮助。接下来,学习如何在python列表中查找项目的索引。继续编码!

类似文章