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生成随机密码的示例分享
Feb 18 Python
Python脚本实现自动发带图的微博
Apr 27 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
python实现Decorator模式实例代码
Feb 09 Python
Python简单I/O操作示例
Mar 18 Python
浅谈python常用程序算法
Mar 22 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
python中p-value的实现方式
Dec 16 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 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学习笔记之二 php入门知识
2011/01/12 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
php中的ini配置原理详解
2014/10/14 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
json简单介绍
2008/06/10 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
Python中使用item()方法遍历字典的例子
2014/08/26 Python
python使用marshal模块序列化实例
2014/09/25 Python
Python求导数的方法
2015/05/09 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
python散点图实例之随机漫步
2018/08/27 Python
python得到单词模式的示例
2018/10/15 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
JVM是一个编译程序还是解释程序
2012/09/11 面试题
七一党建活动方案
2014/01/28 职场文书
卖房协议书
2014/04/11 职场文书
质量保证书格式
2015/02/27 职场文书
销售督导岗位职责
2015/04/10 职场文书
体检通知范文
2015/04/21 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS