互联网
首页 > 互联网> > python基础之:什么是枚举?枚举该怎么使用?python枚举的语法和使用教程

python基础之:什么是枚举?枚举该怎么使用?python枚举的语法和使用教程

作者:互联网

作为开发人员,枚举类型和枚举算法已经是我们的最最基础的操作之一,而且也是最能体现性能优劣的标准之一。在python中,通常使用enumerate 函数来实现枚举的操作,今天我们就系统的来学习下python中的枚举类型到底是怎么用的

什么是 Python 中的枚举?

简而言之,enumerate 函数将一个可迭代对象作为输入,并向每个可迭代元素添加一个计数器,然后返回一个枚举对象。计数器还可以作为每个元素的索引,在以后需要时可以用来引用这些元素。 

Enumerate() 如何工作?

Enumerate() 是Python的内置函数这个函数允许我们循环一些东西并有一个自动计数器。这个函数的工作原理是向可迭代对象添加一个计数器,并以枚举对象的形式返回它。枚举对象可以直接用于循环或使用 list() 方法转换为元组列表。

枚举在 Python 中有什么作用?

Enumerate 是 python 中的内置函数,可让您跟踪循环中的迭代(循环)次数。这个枚举对象包含一个计数(从一开始,它总是默认为 0)和一个通过迭代可迭代对象获得的值。它向可迭代对象添加一个计数器并将其作为枚举对象返回。然后这个枚举对象可以直接用于循环或使用 list() 方法转换为元组列表。 

enumerate 的语法是:enumerate (iterable, start=0)。

如何在 Python 中使用枚举?

enumerate 函数可用于迭代列表、元组或字符串中的一系列项目。该函数有两个参数:要迭代的序列和枚举的起始值。 

默认情况下,起始值为 0,但可以将其指定为关键字参数。enumerate 函数返回一个迭代器,该迭代器为序列中的每个项目生成 (index, value) 对。

这是一个简单的例子:

语法:枚举(可迭代,开始=0)

打印(索引,项目)

输出(例如):

0 苹果

1根香蕉

2 樱桃

在具有起始索引的列表上使用 Enumerate()

enumerate() 函数是一个内置函数,它接受一个列表和一个可选的起始索引作为参数。如果未指定,起始索引默认为 0。此函数返回一个枚举对象,它是一个生成值对的迭代器。还有, 

  • 列表中项目的索引, 
  • 还有物品本身。

当您需要在遍历列表时跟踪项目的索引时,此函数会很有用。例如,您可能想要打印出一个项目列表及其相应的索引。 

为此,您可以使用带有 enumerate() 函数的 for 循环:

my_list = ['a', 'b', 'c']

对于索引,枚举(my_list)中的项目:

打印(索引,项目)

此函数将打印出以下内容:

0个

1 乙

2摄氏度

如果指定起始索引,则第一个项目的索引将是指定的起始索引,并且后续每个项目的索引将递增。 

例如:

my_list = ['a', 'b', 'c']

对于索引,枚举中的项目(my_list,1):

打印(索引,项目)

此函数将打印出以下内容:

1个

2乙

3摄氏度

枚举 Python 集合

Python 集是功能强大的数据结构,可用于以各种方式存储和操作数据。集合是无序的数据集合,因此它们不能用于索引或切片数据。集合以多种方式存储数据,例如唯一值列表或不同值列表。并且集合可以执行一些数学运算,例如并集、交集和差集。

集合可以从任何可迭代对象创建,例如列表或元组。要创建一个集合,只需使用 set() 函数即可。 

例如:

my_set = set([1, 2, 3])

也可以使用 union()、intersection() 或 difference() 函数从其他集合创建集合。 

例如:

my_set = set([1, 2, 3])

other_set = set([2, 3, 4])

my_set.union(other_set)

设置([1, 2, 3, 4])

my_set.intersection(other_set)

设置([2, 3])

my_set.difference(other_set)

设置([1])

枚举 Python 元组

Python 元组是一种基本数据结构,可用于存储一系列值。元组类似于列表,不同之处在于它是不可变的,这意味着元组一旦创建就无法修改其中的值。

您可以通过将以逗号分隔的值序列括在括号中来创建元组。 

例如,以下元组包含值 1、2 和 3:

t = (1, 2, 3)

您可以使用索引访问元组中的值,就像使用列表一样。例如,以下代码检索元组 t 中的第一个和第二个值:

t[0]

1个

t[1]

2个

您还可以使用负索引从元组的末尾开始检索元组的值。 

例如,以下代码检索元组 t 中的最后一个值:

t[-1]

3个

如果您尝试修改元组中的值,则会出现错误:

t[0] = 4

类型错误:“元组”对象不支持项目分配

但是,您可以将元组连接在一起以创建一个新元组:

t + (4, 5, 6)

(1, 2, 3, 4, 5, 6)

您还可以通过包含尾随逗号来创建具有单个值的元组:

t = (1,)

当你想创建一个只有一个值的元组时,元组通常很有用,但你不能使用列表,因为你需要一个不可变的数据结构。

枚举一个字符串

在 Python中处理字符串时,枚举字符串中的字符通常很有用。这个过程可以用内置函数 enumerate() 来完成。

Enumerate 接受一个可迭代对象(例如字符串)并返回一个枚举对象,其中包含一个元组列表。每个元组包含字符的索引和字符本身。

例如,如果我们有字符串“hello”,我们可以像这样枚举字符:

对于索引,枚举中的字符(“你好”):

打印(索引,字符)

...

0小时

1 电子

2 升

3 升

4 o

如您所见,每个元组中的第一个元素是字符的索引,第二个元素是字符本身。

当您需要单独处理字符串中的每个字符时(例如,当您需要加密或解密字符串时),枚举字符串会很有用。

枚举字典

在 Python 中,可以使用内置函数 enumerate() 枚举字典。此函数将字典作为参数并返回一个枚举对象,然后可以使用该对象遍历字典。 

enumerate() 返回的枚举对象有两个属性: 

  • 第一个属性是索引,从 0 开始。它上升到字典中的项目数。 
  • 第二个属性是值,它是相应索引处字典键的值。 

例如,考虑以下字典:

my_dict = {“a”:1,“b”:2,“c”:3}

我们可以使用 enumerate() 枚举这个字典:

对于索引,枚举值(my_dict): 

打印(索引,值) 

...

0个 

1 乙 

2摄氏度

我们可以看到,枚举对象的第一个属性是索引,第二个属性是值。我们可以使用索引访问这些属性:

对于索引,枚举值(my_dict): 

打印(索引,值,my_dict [值]) 

...

0 一 1 

1 乙 2 

2 C 3

如我们所见,索引允许我们访问相应索引处的字典键的值。这就是我们如何在 Python 中枚举字典。

Python 中枚举的语法

内置枚举函数的语法是 - 

枚举(可迭代,start_index)

参数:

  • 可迭代对象:可迭代对象是可以循环的对象。Python 中可迭代对象的例子有元组、列表、集合等。
  • Start_Index:这个参数是可选的,它定义了循环中第一个元素的计数应该从哪个值开始。然后,对于后续元素,此计数将递增 1,直到结束。如果未定义此参数,则默认值为 0。

返回值:

enumerate 函数的返回值是 enumerate 对象,它包含具有计数值的元组和 iterables 的项目或元素。

对于循环与。在 Python 中枚举

在 Python 中有两种遍历序列的方法:for 循环和枚举函数。

  • 循环是遍历序列的传统方式。它使用简单,易于理解。它允许您迭代一系列项目而无需跟踪当前项目的索引。但是,如果您处理的是大型序列,它的效率可能会很低。
  • enumerate 函数是一个内置函数,允许您遍历序列并跟踪每个元素的索引。如果您需要访问序列中每个元素的索引,此函数会很有用。但是,它可能比 for 循环更难理解。

如何使用 Python 枚举方法? 

Python 的 enumerate 方法允许您迭代列表、元组或字典并返回包含每个元素的索引和元素本身的元组。这是跟踪元素及其在列表中的位置的便捷方式。要使用枚举方法,您需要传入要迭代的列表、元组或字典。

添加入门索引值

enumerate 方法允许您在遍历列表时跟踪列表的索引值。当您需要根据其位置访问列表中的特定元素时,此方法特别有用。 

例如,假设您有一个数字列表,并且您想要找到偶数索引位置的所有元素的总和。使用枚举方法,您可以轻松跟踪索引值并相应地对元素求和。

例如:

# 添加起始索引值

打印(索引,项目)

# 输出

0个

1 乙

2摄氏度

跳过项目的条件语句

如果您正在使用 enumerate 迭代一个序列,有时您可能想要跳过某些项目。这个过程可以通过在循环中使用条件语句来完成。 

例如,假设您有一个数字列表,但只想打印偶数。您可以通过使用模运算符 (%) 检查 0 的余数来执行此操作:

数字 = [1、2、3、4、5、6、7、8、9、10]

对于我,枚举中的数字(数字):

如果 num % 2 == 0:

打印(数字)

此代码将打印 2、4、6、8、10。

使用 Enumerate() 解包参数

当您使用列表时,您可能想要枚举它们,以便您可以跟踪什么项目在什么索引处。如果您有要解包的参数列表,可以使用 enumerate() 函数来执行此操作。

例如,假设您有一个参数列表,您希望将其解压缩到各个变量中。您可以使用 enumerate() 函数来执行此操作:

参数 = [1, 2, 3]

对于索引,枚举中的 arg(args):

打印(索引,参数)

打印输出:

0 1

1 2

2 3

您还可以使用 enumerate() 函数解压元组列表:

元组 = [(1, 2), (3, 4), (5, 6)]

对于枚举(元组)中的索引,(arg1,arg2):

打印(索引,arg1,arg2)

打印输出:

0 1 2

1 3 4

2 5 6

示例 1:

让我们考虑一个简单的例子,其中循环用于打印索引和列表的项目。

程序:

字母 = [“a”、“b”、“c”、“d”、“e”、“f”、“g”]

索引 = 0

对于字母中的字母:

打印(索引,字母)

索引 += 1

输出: 

 

LoopsVs.Enumerate_exp1

在这里,您看到了使用名为 index 的变量来跟踪元素的计数以及 iterable 中每个元素的索引。尝试另一种方法来做同样的事情。

示例 2:

您还可以将范围与长度函数一起使用来执行相同的功能。

程序: 

字母 = [“a”、“b”、“c”、“d”、“e”、“f”、“g”]

对于范围内的索引(len(字母)):

打印(索引,字母[索引])

输出:

 

LoopsVs.Enumerate_exp2

这种方法也很低效,因为您必须使用长度函数来迭代可迭代对象以找到计数。

示例 3: 

现在,使用枚举函数执行相同的操作。enumerate 函数节省了使用额外变量的内存,返回值是对内存的简单引用,而不是实际的列表或可迭代项。

程序:

字母 = [“a”、“b”、“c”、“d”、“e”、“f”、“g”]

对于索引,枚举值(字母):

打印(索引,值)

输出:

 

LoopsVs.Enumerate_exp3

没有必要跟踪一个单独的计数变量,在每次迭代中推进它,或者经历单独维护索引的麻烦。一切都由枚举函数处理。

如果你返回枚举对象的类型,你会发现它只是一个内存位置的引用。

字母 = [“a”、“b”、“c”、“d”、“e”、“f”、“g”]

打印(枚举(字母))

输出:

 

LoopsVs.Enumerate_exp3_1

使用 Start 参数

您可以在 start 参数中指定不同的起始值。默认值为 0,如果您提到不同的值,则从该值开始计数,并为可迭代对象中的所有项目继续递增。

程序:

字母 = [“a”、“b”、“c”、“d”、“e”、“f”、“g”]

枚举列表 = 列表(枚举(字母,20))

打印(枚举列表)

输出:

 

起始参数

如您所见,起始索引现在已更改为第二个参数中指定的索引。

在 Python 中循环遍历枚举对象

在此示例中,尝试使用简单的 for 循环遍历枚举对象。 

程序: 

字母 = [“a”、“b”、“c”、“d”、“e”、“f”、“g”]

enumerated_object = 枚举(字母)

对于我在 enumerated_object 中:

打印(i)

输出:

 

循环_1

您可以看到每个对象都是返回的枚举对象内的一个元组。

在 Python 中使用枚举的有用技巧

  • 当您想要跟踪可迭代对象中每个项目的索引时使用 enumerate():enumerate() 允许您在跟踪当前项目索引的同时遍历项目集合。当您需要访问循环体中的索引时,此过程很有用。
  • 使用 enumerate() 来简化复杂的列表理解: enumerate() 可以通过提供一种更有效的方式来迭代列表中的值来简化复杂的列表理解。这种简化有助于降低代码的复杂性并使您的代码更具可读性。
  • 使用 enumerate() 提高代码性能:当您需要遍历项目集合时,使用 enumerate() 可以提高代码性能。这个好处是因为 enumerate() 为集合创建了一个迭代器,这比遍历每个项目更有效。

在 Python 中使用枚举的优点

  • 您可以在任何可迭代对象上使用枚举,无论是列表、集合、字典、字符串、对象等。 
  • Enumerate 通过使用更少的代码行执行相同的功能来保持代码整洁。
  • 您可以通过枚举跟踪元素的计数以及每个元素的索引,而不必为每个元素维护单独的变量并递增计数器。
  • 它是一个自动计数器,也可用于通过在第二个参数中指定适当的值来更改索引的起始值。

在 Python 中使用枚举的缺点

  • 由于添加了计数器,Enumerate 占用了更多的内存。
  • Enumerate 不适合并行计算,因为无法保证输出顺序。
  • 此外,由于计算开销,它不适合大型数据集。

Python 迭代器复习 

Python 迭代器是一种允许您迭代一系列值的对象。它们是语言的关键部分,用于循环、理解和其他需要迭代一系列值的地方。

Python 中有两种类型的迭代器:

  1. 迭代器协议:这是创建迭代器的标准方法。它定义了两个方法,__iter__() 和 __next__()。
  2. yield 语句:这是一种特殊类型的迭代器,用于创建生成器。生成器是一种迭代器,允许您动态生成值。

例子:

在 Python 中,迭代器是实现迭代器协议的对象。该协议由两个方法组成:__iter__() 和 __next__()。

  • __iter__() 方法用于初始化迭代器。它在首次创建迭代器时调用。 
  • __next__() 方法用于从数据结构中检索下一个元素。它在循环的每次迭代中被调用。

我们将通过创建一个简单的数据结构来启动迭代器:一个数字列表。

数字 = [1, 2, 3, 4, 5]

我们可以使用内置的 iter() 函数为此列表创建一个迭代器:

迭代器 = iter(数字)

现在我们可以使用迭代器遍历列表:

对于迭代器中的 num:

打印(数字)

此代码会将列表中的每个数字打印到控制台。

我们还可以使用迭代器对每个元素执行操作。 

例如,我们可以使用 next() 函数从迭代器中检索下一个元素:

num = next(迭代器)

此代码将从迭代器 (1) 中检索第一个元素。然后我们可以在我们的代码中使用这个元素。

迭代器是处理数据的强大工具。通过使用迭代器,我们可以高效地循环遍历数据结构并对每个元素执行各种操作。

结论

在本指南中,您已经看到了 Python 中混乱的 for 循环的最佳替代方法之一。您看到了 Python 中枚举方法的基本介绍,以及它接受的语法和参数。本教程还探讨了它作为输入的可迭代对象,使用 start_index 参数,并看到了一堆示例,演示了如何在 python 中使用枚举而不是传统的 for 循环。 

标签:python,python枚举
来源: