Python 教程之控制流(10)在Python中有效地使用迭代

简介: Python 教程之控制流(10)在Python中有效地使用迭代

下面是使用迭代器的不同方法。C风格的方法:这种方法需要事先知道迭代的总次数。

# 访问列表元素的 C 风格方式
cars = ["Aston", "Audi", "McLaren"]
i = 0
while (i < len(cars)):
  print cars[i]
  i += 1

输出

Aston
Audi
McLaren

重点:

  • Python 程序很少使用这种循环方式。
  • 这种4步方法不会产生单视图循环构造的紧凑性。
  • 这在大型程序或设计中也容易出错。
  • Python中没有C风格的for循环,即类似于for(int I=0;I

使用for-in或for each样式: 他的风格用于Python中,包含列表、字典、n维数组等的迭代器。迭代器在循环时获取每个组件并打印数据。迭代器在此构造中自动递增/递减。

# 使用 for-in 循环访问项
cars = ["Aston", "Audi", "McLaren"]
for x in cars:
  print x

输出:

Aston
Audi 
McLaren

使用range函数索引:我们还可以在Python中使用range()索引。

# 使用索引和 for-in 访问项
cars = ["Aston", "Audi", "McLaren"]
for i in range(len(cars)):
  print cars[i]

输出:

Aston
Audi 
McLaren

enumerate:enumerate是一个内置的Python函数,它将输入作为迭代器、列表等,并返回一个包含索引的元组和迭代器序列中该索引处的数据。例如,enumerate(cars)返回一个迭代器,该迭代器将返回(0,cars[0])、(1,cars[1])、(2,cars[2])等等。

# 使用 enumerate() 访问项目
cars = ["Aston", "Audi", "McLaren "]
for i, x in enumerate(cars):
  print(x)

输出

Aston
Audi
McLaren

下面的解决方案也起作用。

# 访问项和索引 enumerate()
cars = ["Aston" , "Audi", "McLaren "]
for x in enumerate(cars):
  print (x[0], x[1])

输出 :

(0, 'Aston')
(1, 'Audi')
(2, 'McLaren ')

我们还可以直接打印 enumerate() 的返回值,以查看它返回的内容。

# 正在打印 enumerate() 的返回值
cars = ["Aston" , "Audi", "McLaren "]
print (enumerate(cars))

输出 :

<enumerate object at 0x7fe4f914d3c0>

Enumerate采用参数Start,该参数默认设置为零。我们可以将此参数更改为我们喜欢的任何值。在下面的代码中,我们使用了start as 1。

# 演示如何在枚举中使用start
cars = ["Aston" , "Audi", "McLaren "]
for x in enumerate(cars, start=1):
  print (x[0], x[1])

输出

(1, 'Aston')
(2, 'Audi')
(3, 'McLaren ')

enumerate() 帮助嵌入解决方案,以访问迭代器中的每个数据项并获取每个数据项的索引。

循环扩展名:

i) 两个迭代器用于单个循环构造:在这种情况下,列表和字典将用于使用枚举函数的单个循环块中的每个迭代。让我们看一个例子。

# 两个单独的列表
cars = ["Aston", "Audi", "McLaren"]
accessories = ["GPS kit", "Car repair-tool kit"]
# 单一词典持有汽车及其配件的价格。前三项商店汽车价格,后两项商店配件价格。
prices = {1: "570000$", 2: "68000$", 3: "450000$",
    4: "8900$", 5: "4500$"}
# 输出汽车价格
for index, c in enumerate(cars, start=1):
  print "Car: %s Price: %s" % (c, prices[index])
# 输出附件价格
for index, a in enumerate(accessories, start=1):
  print("Accessory: %s Price: %s"
    % (a, prices[index+len(cars)]))

输出

Car: Aston Price: 570000$
Car: Audi Price: 68000$
Car: McLaren Price: 450000$
Accessory: GPS kit Price: 8900$
Accessory: Car repair-tool kit Price: 4500$

ii) ZIP函数(两个迭代器都用于单个循环构造):此函数有助于在第I个位置组合相似类型的迭代器(列表-列表或命令-命令等)数据项。它使用这些输入迭代器中最短的长度。其他具有较大长度迭代器的项将被跳过。如果迭代器为空,则不返回任何输出。

例如,对两个列表(迭代器)使用ZIP有助于组合单个汽车及其所需的附件。

# Python程序来演示zip的工作原理
# 两个单独的清单
cars = ["Aston", "Audi", "McLaren"]
accessories = ["GPS", "Car Repair Kit",
      "Dolby sound kit"]
# 合并列表和打印
for c, a in zip(cars, accessories):
  print "Car: %s, Accessory required: %s"\
    % (c, a)

输出

yaml

Car: Aston, Accessory required: GPS
Car: Audi, Accessory required: Car Repair Kit
Car: McLaren, Accessory required: Dolby sound kit

ZIP函数中的这些迭代器的反向操作称为使用“*”运算符进行解压缩。枚举函数和zip函数的使用有助于实现Python中迭代逻辑的有效扩展,并解决大型任务或问题的更多子问题。

# 使用*和zip函数演示unzip(zip的反向)的Python程序
# 解压缩列表
l1,l2 = zip(*[('Aston', 'GPS'),
      ('Audi', 'Car Repair'),
      ('McLaren', 'Dolby sound kit')
    ])
# 输出 unzipped 列表  
print(l1)
print(l2)

输出:

('Aston', 'Audi', 'McLaren')
('GPS', 'Car Repair', 'Dolby sound kit')



目录
相关文章
|
3天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
10 1
|
5天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 插值 2
SciPy插值教程:介绍插值概念及其在数值分析中的应用,特别是在处理数据缺失时的插补和平滑数据集。SciPy的`scipy.interpolate`模块提供了强大的插值功能,如一维插值和样条插值。通过`UnivariateSpline()`函数,可以轻松实现单变量插值,示例代码展示了如何对非线性点进行插值计算。
10 3
|
6天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
13 1
|
4天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 插值 3
本教程介绍了SciPy中的插值方法,包括什么是插值及其在数据处理和机器学习中的应用。通过 `scipy.interpolate` 模块,特别是 `Rbf()` 函数,展示了如何实现径向基函数插值,以平滑数据集中的离散点。示例代码演示了如何使用 `Rbf()` 函数进行插值计算。
8 0
|
4天前
|
Python
SciPy 教程 之 Scipy 显著性检验 1
本教程介绍Scipy显著性检验,包括统计假设、零假设和备择假设等概念,以及如何使用scipy.stats模块进行显著性检验,以判断样本与总体假设间是否存在显著差异。
8 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编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####