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制作数据导入导出工具
Jul 31 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
Python实现二维有序数组查找的方法
Apr 27 Python
python非递归全排列实现方法
Apr 10 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
pandas.DataFrame 根据条件新建列并赋值的方法
Apr 08 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
python相对企业语言优势在哪
Jun 12 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 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缓存技术介绍
2006/11/25 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
js实现div色块拖动录制
2020/01/16 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python插入排序算法实例分析
2015/07/03 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
对python调用RPC接口的实例详解
2019/01/03 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
OpenCV 模板匹配
2019/07/10 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
深入了解Python enumerate和zip
2020/07/16 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
Delphi工程师笔试题
2013/09/21 面试题
医生自荐信
2013/10/11 职场文书
3分钟演讲稿
2014/04/30 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python