python同时遍历数组的索引和值的实例
你想在迭代一个序列的同时跟踪正在被处理的元素索引。
获取索引
内置的enumerate()函数可以很好的解决这个问题:
>>>my_list=['a','b','c'] >>>foridx,valinenumerate(my_list): ...print(idx,val) ... 0a 1b 2c
行号从1开始
为了按传统行号输出(行号从1开始),你可以传递一个开始参数:
>>>my_list=['a','b','c'] >>>foridx,valinenumerate(my_list,1): ...print(idx,val) ... 1a 2b 3c
行号定位
这种情况在你遍历文件时想在错误消息中使用行号定位时候非常有用:
defparse_data(filename): withopen(filename,'rt')asf: forlineno,lineinenumerate(f,1): fields=line.split() try: count=int(fields[1]) ... exceptValueErrorase: print('Line{}:Parseerror:{}'.format(lineno,e))
enumerate()对于跟踪某些值在列表中出现的位置是很有用的。所以,如果你想将一个文件中出现的单词映射到它出现的行号上去,可以很容易的利用enumerate()来完成:
word_summary=defaultdict(list) withopen('myfile.txt','r')asf: lines=f.readlines() foridx,lineinenumerate(lines): #Createalistofwordsincurrentline words=[w.strip().lower()forwinline.split()] forwordinwords: word_summary[word].append(idx)
如果你处理完文件后打印word_summary,会发现它是一个字典(准确来讲是一个defaultdict),对于每个单词有一个key,每个key对应的值是一个由这个单词出现的行号组成的列表。如果某个单词在一行中出现过两次,那么这个行号也会出现两次,同时也可以作为文本的一个简单统计。
计数变量
当你想额外定义一个计数变量的时候,使用enumerate()函数会更加简单。你可能会像下面这样写代码:
lineno=1 forlineinf: #Processline ... lineno+=1
但是如果使用enumerate()函数来代替就显得更加优雅了:
forlineno,lineinenumerate(f): #Processline ...
enumerate()函数返回的是一个enumerate对象实例,它是一个迭代器,返回连续的包含一个计数和一个值的元组,元组中的值通过在传入序列上调用next()返回。
陷阱
还有一点可能并不很重要,但是也值得注意,有时候当你在一个已经解压后的元组序列上使用enumerate()函数时很容易调入陷阱。你得像下面正确的方式这样写:
data=[(1,2),(3,4),(5,6),(7,8)] #Correct! forn,(x,y)inenumerate(data): ... #Error! forn,x,yinenumerate(data): ...
参考:
https://docs.python.org/2/library/functions.html#enumerate
以上这篇python同时遍历数组的索引和值的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。