Python 教程之控制流(15)可迭代和迭代器之间的区别

简介: Python 教程之控制流(15)可迭代和迭代器之间的区别

可迭代是一个对象,可以迭代。它在传递给iter()方法时生成一个迭代器。迭代器是一个对象,用于使用__next__()方法循环访问可迭代对象。迭代器具有__next__()方法,该方法返回对象的下一项。

注意: 每个迭代器也是可迭代的,但并非每个可迭代器都是 Python 中的迭代器。

例如,列表是可迭代的,但列表不是迭代器。可以使用函数 iter() 从可迭代对象创建迭代器。为了实现这一点,对象的类需要一个方法__iter__,它返回一个迭代器,或者一个__getitem__方法,其顺序索引以 0 开头。

示例 1:

我们知道 str 是可迭代的,但它不是迭代器。如果我们在for循环中运行它来打印字符串,那么这是可能的,因为当for循环执行时,它会转换为迭代器来执行代码。

BB

代码

next("GFG")

**输出:**
```python
Traceback (most recent call last):
  File "/home/1c9622166e9c268c0d67cd9ba2177142.py", line 2, in <module>
    next("GFG")
TypeError: 'str' object is not an iterator

这里iter( )正在将字符串(可迭代)的s转换为迭代器,并首次打印G,我们可以多次调用以迭代字符串。

当执行 for 循环时,for 语句在对象上调用 iter(),它应该循环访问该对象。

如果此调用成功,则迭代器调用将返回一个迭代器对象,该对象定义方法 next(),该方法一次访问一个对象的元素。

# 代码
s="GFG"
s=iter(s)
print(s)
print(next(s))
print(next(s))
print(next(s))

输出:

<str_iterator object at 0x7f822a9c3210>
G
F
G

如果没有其他可用的元素,next() 方法将引发停止站点异常。

for 循环将在捕获停止站点异常后立即终止。

让我们使用 next() 内置函数调用__next__() 方法。

示例 2:

如果对象“obj”是可迭代的,则函数“可迭代”将返回 True,否则返回 False。

# 城市列表
cities = ["Berlin", "Vienna", "Zurich"]
# 初始化对象
iterator_obj = iter(cities)
print(next(iterator_obj))
print(next(iterator_obj))
print(next(iterator_obj))

输出:

Berlin
Vienna
Zurich

注意: 如果再次调用“next(iterator_obj)”,它将返回“停止站点”。

示例 3:

检查对象是否可迭代。

# 检查对象是否可迭代的函数
def it(ob):
try:
  iter(ob)
  return True
except TypeError:
  return False
# 驱动程序代码
for i in [34, [4, 5], (4, 5),
{"a":4}, "dfsdf", 4.5]:
  print(i,"is iterable :",it(i))

输出:

34 is iterable : False
[4, 5] is iterable : True
(4, 5) is iterable : True
{'a': 4} is iterable : True
dfsdf is iterable : True
4.5 is iterable : False


目录
相关文章
|
3天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
10 1
|
5天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 插值 2
SciPy插值教程:介绍插值概念及其在数值分析中的应用,特别是在处理数据缺失时的插补和平滑数据集。SciPy的`scipy.interpolate`模块提供了强大的插值功能,如一维插值和样条插值。通过`UnivariateSpline()`函数,可以轻松实现单变量插值,示例代码展示了如何对非线性点进行插值计算。
10 3
|
4天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 插值 3
本教程介绍了SciPy中的插值方法,包括什么是插值及其在数据处理和机器学习中的应用。通过 `scipy.interpolate` 模块,特别是 `Rbf()` 函数,展示了如何实现径向基函数插值,以平滑数据集中的离散点。示例代码演示了如何使用 `Rbf()` 函数进行插值计算。
8 0
|
4天前
|
Python
SciPy 教程 之 Scipy 显著性检验 1
本教程介绍Scipy显著性检验,包括统计假设、零假设和备择假设等概念,以及如何使用scipy.stats模块进行显著性检验,以判断样本与总体假设间是否存在显著差异。
8 0
|
C# Python
Python中的module,library,package之间的区别
背景 Python中有一些基本的名词,很多人,尤其是一些初学者,可能听着就很晕。 此处,简单总结一下,module,library,package之间的大概区别。 Python中的module的简介 module,中文翻译为:模块 Python中的module,说白了,就是Python文件,而python文件一般后缀为py,所以就是你的xxx.py而已。
1734 0
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
3天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
3天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
5天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
4天前
|
机器学习/深度学习 存储 算法
探索Python编程:从基础到高级应用
【10月更文挑战第38天】本文旨在引导读者从Python的基础知识出发,逐渐深入到高级编程概念。通过简明的语言和实际代码示例,我们将一起探索这门语言的魅力和潜力,理解它如何帮助解决现实问题,并启发我们思考编程在现代社会中的作用和意义。