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的Bottle框架中使用微信API的示例
Apr 23 Python
Python3安装Pymongo详细步骤
May 26 Python
Python判断有效的数独算法示例
Feb 23 Python
Python中py文件转换成exe可执行文件的方法
Jun 14 Python
Python 调用 Windows API COM 新法
Aug 22 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
python 表格打印代码实例解析
Oct 12 Python
python实现人脸签到系统
Apr 13 Python
Python pip install如何修改默认下载路径
Apr 29 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 Python
python3.8动态人脸识别的实现示例
Sep 21 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 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图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
python的re模块应用实例
2014/09/26 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
python 装饰器的使用示例
2020/10/10 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
搞笑创意广告语
2014/03/17 职场文书
化工操作工岗位职责
2014/04/29 职场文书
感恩节寄语2015
2015/03/24 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书