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 基础学习第二弹 类属性和实例属性
Aug 27 Python
python算法学习之基数排序实例
Dec 18 Python
Python实现ping指定IP的示例
Jun 04 Python
对python产生随机的二维数组实例详解
Dec 13 Python
python 实现倒排索引的方法
Dec 25 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
Python实现使用request模块下载图片demo示例
May 24 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
Python使用pyyaml模块处理yaml数据
Apr 14 Python
python实现三种随机请求头方式
Jan 05 Python
python APScheduler执行定时任务介绍
Apr 19 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
大师制作的中短波矿石收音机
2020/04/02 无线电
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
php处理带有中文URL的方法
2016/07/11 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
JavaScript 布尔操作符解析  && || !
2012/08/10 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
js获取页面description的方法
2015/05/21 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
python 不关闭控制台的实现方法
2011/10/23 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python标准库之itertools库的使用方法
2017/09/07 Python
查看django版本的方法分享
2018/05/14 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python Flask框架扩展操作示例
2019/05/03 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
django 取消csrf限制的实例
2020/03/13 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
营业员演讲稿
2013/12/30 职场文书
个人收入证明范本
2014/01/12 职场文书
关于运动会的稿件
2014/02/02 职场文书
七年级地理教学计划
2015/01/22 职场文书
初婚初育证明范本
2015/06/18 职场文书
少先队入队仪式主持词
2015/07/04 职场文书