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视图之ORM数据库查询操作API的实例
Oct 27 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
详解python3中的真值测试
Aug 13 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
Python计算信息熵实例
Jun 18 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 Python
Django migrate报错的解决方案
May 20 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多个文件及图片上传实例详解
2014/11/10 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
requests和lxml实现爬虫的方法
2017/06/11 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
详解python的ORM中Pony用法
2018/02/09 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python Selenium参数配置方法解析
2020/01/19 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
Weblogic的布署方式
2013/08/23 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
美发店5.1活动方案
2014/01/24 职场文书
上班上网检讨书
2014/01/29 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
服务员岗位职责
2015/02/03 职场文书
教师思想工作总结2015
2015/05/13 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
超强台风观后感
2015/06/09 职场文书
生日宴会祝酒词
2015/08/10 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
k8s部署redis cluster集群的实现
2021/06/24 Redis
HTML+JS实现在线朗读器
2022/02/15 Javascript
JavaScript的Set数据结构详解
2022/02/18 Javascript