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分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
python openpyxl使用方法详解
Jul 18 Python
python opencv 简单阈值算法的实现
Aug 04 Python
django将数组传递给前台模板的方法
Aug 06 Python
Python Django 前后端分离 API的方法
Aug 28 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
浅谈Python协程
Jun 17 Python
浅谈Python __init__.py的作用
Oct 28 Python
python 下载文件的几种方式分享
Apr 07 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利用str_replace防注入的方法
2013/11/10 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
JavaScript中的比较操作符>、=、
2014/12/31 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
简单介绍Python中的JSON模块
2015/04/08 Python
Python数据类型学习笔记
2016/01/13 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
python实现彩票系统
2020/06/28 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
python3实现飞机大战
2020/11/29 Python
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
数据管理员的自我评价分享
2013/11/15 职场文书
毕业典礼演讲稿
2014/05/13 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
python基础之匿名函数详解
2021/04/21 Python
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫