python同时遍历数组的索引和值的实例


Posted in Python onNovember 15, 2018

你想在迭代一个序列的同时跟踪正在被处理的元素索引。

获取索引

内置的 enumerate() 函数可以很好的解决这个问题:

>>> my_list = ['a', 'b', 'c']
>>> for idx, val in enumerate(my_list):
...  print(idx, val)
...
0 a
1 b
2 c

行号从1开始

为了按传统行号输出(行号从1开始),你可以传递一个开始参数:

>>> my_list = ['a', 'b', 'c']
>>> for idx, val in enumerate(my_list, 1):
...  print(idx, val)
...
1 a
2 b
3 c

行号定位

这种情况在你遍历文件时想在错误消息中使用行号定位时候非常有用:

def parse_data(filename):
 with open(filename, 'rt') as f:
  for lineno, line in enumerate(f, 1):
   fields = line.split()
   try:
    count = int(fields[1])
    ...
   except ValueError as e:
    print('Line {}: Parse error: {}'.format(lineno, e))

enumerate() 对于跟踪某些值在列表中出现的位置是很有用的。 所以,如果你想将一个文件中出现的单词映射到它出现的行号上去,可以很容易的利用 enumerate() 来完成:

word_summary = defaultdict(list)

with open('myfile.txt', 'r') as f:
 lines = f.readlines()

for idx, line in enumerate(lines):
 # Create a list of words in current line
 words = [w.strip().lower() for w in line.split()]
 for word in words:
  word_summary[word].append(idx)

如果你处理完文件后打印 word_summary ,会发现它是一个字典(准确来讲是一个 defaultdict ), 对于每个单词有一个 key ,每个 key 对应的值是一个由这个单词出现的行号组成的列表。 如果某个单词在一行中出现过两次,那么这个行号也会出现两次, 同时也可以作为文本的一个简单统计。

计数变量

当你想额外定义一个计数变量的时候,使用 enumerate() 函数会更加简单。你可能会像下面这样写代码:

lineno = 1
for line in f:
 # Process line
 ...
 lineno += 1

但是如果使用 enumerate() 函数来代替就显得更加优雅了:

for lineno, line in enumerate(f):
 # Process line
 ...

enumerate() 函数返回的是一个 enumerate 对象实例, 它是一个迭代器,返回连续的包含一个计数和一个值的元组, 元组中的值通过在传入序列上调用 next() 返回。

陷阱

还有一点可能并不很重要,但是也值得注意, 有时候当你在一个已经解压后的元组序列上使用 enumerate() 函数时很容易调入陷阱。 你得像下面正确的方式这样写:

data = [ (1, 2), (3, 4), (5, 6), (7, 8) ]

# Correct!
for n, (x, y) in enumerate(data):
 ...
# Error!
for n, x, y in enumerate(data):
 ...

参考:

https://docs.python.org/2/library/functions.html#enumerate

以上这篇python同时遍历数组的索引和值的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的rjust()方法使用详解
May 19 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Python采用Django开发自己的博客系统
Sep 29 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
python实现代码统计程序
Sep 19 Python
Python之Class&Object用法详解
Dec 25 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
用Python开发app后端有优势吗
Jun 29 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
总结三种用 Python 作为小程序后端的方式
May 02 Python
python保存二维数组到txt文件中的方法
Nov 15 #Python
使用Python的toolz库开始函数式编程的方法
Nov 15 #Python
Python中is和==的区别详解
Nov 15 #Python
Python中垃圾回收和del语句详解
Nov 15 #Python
Matplotlib中文乱码的3种解决方案
Nov 15 #Python
Python使用sorted对字典的key或value排序
Nov 15 #Python
python并发和异步编程实例
Nov 15 #Python
You might like
文件系统基本操作类
2006/11/23 PHP
PHP面向对象分析设计的经验原则
2008/09/20 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
python实现的登录和操作开心网脚本分享
2014/07/09 Python
python中Genarator函数用法分析
2015/04/08 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
python和opencv实现抠图
2018/07/18 Python
浅谈Python爬虫基本套路
2019/03/25 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
最新自我评价范文
2013/11/16 职场文书
手机银行营销方案
2014/03/14 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
先进工作者申报材料
2014/12/23 职场文书