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操作MongoDB基础知识
Nov 01 Python
python查询mysql中文乱码问题
Nov 09 Python
讲解Python中for循环下的索引变量的作用域
Apr 15 Python
基python实现多线程网页爬虫
Sep 06 Python
pandas中Timestamp类用法详解
Dec 11 Python
理解python中生成器用法
Dec 20 Python
python模拟表单提交登录图书馆
Apr 27 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
详解Python requests 超时和重试的方法
Dec 18 Python
python实现指定ip端口扫描方式
Dec 17 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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
php 传值赋值与引用赋值的区别
2010/12/29 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
php控制文件下载速度的方法
2015/03/24 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
php实现用户登陆简单实例
2017/04/04 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
jQuery Clone Bug解决代码
2010/12/22 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
GWebs公司笔试题
2012/05/04 面试题
大学生个人总结的自我评价
2013/10/05 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
男性健康日的活动方案
2014/08/18 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
windows安装python超详细图文教程
2021/05/21 Python
sass 常用备忘案例详解
2021/09/15 HTML / CSS