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的web.py框架下的application.py模块
May 02 Python
Python设计模式之抽象工厂模式
Aug 25 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python的debug实用工具 pdb详解
Jul 12 Python
python+numpy实现的基本矩阵操作示例
Jul 19 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
python opencv肤色检测的实现示例
Dec 21 Python
浅谈matplotlib默认字体设置探索
Feb 03 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
js登录弹出层特效
2014/03/07 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
用Python解决x的n次方问题
2019/02/08 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
用Python开发app后端有优势吗
2020/06/29 Python
社会实践自我鉴定
2013/11/07 职场文书
物流仓储计划书
2014/01/10 职场文书
祖国在我心中演讲稿
2014/01/15 职场文书
如何写好建议书
2014/03/13 职场文书
成绩单评语
2015/01/04 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android