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接入新浪微博OAuth的方法
Jun 29 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
python图像常规操作
Nov 11 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Django框架模板用法入门教程
Nov 04 Python
python-视频分帧&多帧合成视频实例
Dec 10 Python
详解python破解zip文件密码的方法
Jan 13 Python
python deque模块简单使用代码实例
Mar 12 Python
Django Form设置文本框为readonly操作
Jul 03 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 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 CURL用法的深入分析
2013/06/09 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
php 的反射详解及示例代码
2016/08/25 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
使用angular写一个hello world
2015/01/23 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
js 颜色选择插件
2017/01/23 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
python贪吃蛇游戏代码
2020/04/18 Python
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
全神贯注教学反思
2014/02/03 职场文书
遗嘱继承公证书
2014/04/09 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
就业协议书怎么填
2014/09/15 职场文书
英文版辞职信
2015/02/28 职场文书
服务行业标语口号
2015/12/26 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis