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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
python中的__slots__使用示例
Feb 26 Python
Python脚本实现代码行数统计代码分享
Mar 10 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
Python 微信之获取好友昵称并制作wordcloud的实例
Feb 21 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
Python读取yaml文件的详细教程
Jul 21 Python
Python unittest装饰器实现原理及代码
Sep 08 Python
Python urllib3软件包的使用说明
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
如何开始收听短波广播
2021/03/01 无线电
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
Ajax PHP分页演示
2007/01/02 PHP
php邮件发送,php发送邮件的类
2011/03/24 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
php变量作用域的深入解析
2013/06/03 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
JS之小练习代码
2008/10/12 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
python中的闭包用法实例详解
2015/05/05 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
恶意软件的定义
2014/11/12 面试题
AJAX的全称是什么
2012/11/06 面试题
共产党员公开承诺书范文
2014/03/28 职场文书
企业文化标语口号
2014/06/09 职场文书