python同时遍历数组的索引和值的实例
你想在迭代⼀个序列的同时跟踪正在被处理的元素索引。
获取索引
内置的 enumerate() 函数可以很好的解决这个问题:
>>> my_list = ['a', 'b', 'c']
>>> for idx, val in enumerate(my_list):
...  print(idx, val)
...
0 a
1 b
python 定义数组
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('', '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):
...
参考:
以上这篇python同时遍历数组的索引和值的实例就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。