python3--产生偏移和元素:enumerate

之前,我们讨论过通过range来产生字符串中元素的偏移值。而不是那些偏移值处的元素。不过,在有些程序中。我们两者都需要,要用的元素以及值个元素的偏移值。从传统意义来讲,这是简单的for循环,他同时也持有一个记录当前偏移值的计数器。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

s = "spam"
offset = 0
for item in s:
    print(item, "appear at offset", offset)
    offset += 1

以上代码执行结果:

s appear at offset 0
p appear at offset 1
a appear at offset 2
m appear at offset 3

用内置函数完成以上的代码

s = "spam"
for (offset, item) in enumerate(s):
    print(item, "appear at offset", offset)
s appear at offset 0
p appear at offset 1
a appear at offset 2
m appear at offset 3

emumerate函数返回一个生成器对象;这种对象支持迭代些以,它有个next方法,每次遍历列表时,会返回一个(index, value)的元组,而我们能在for中通过元组赋值运算将其分解(很像是使用zip)

#!/usr/bin/env python
# -*- coding:utf-8 -*-

s = "spam"
E = enumerate(s)
print(E.__next__())
print(E.__next__())
print(E.__next__())
print(E.__next__())

执行结果:

(0, 's')
(1, 'p')
(2, 'a')
(3, 'm')

我们一般不会看到其作用的机制,这是因为迭代环境(包括列表解析)会自动执行迭代协议:

s = "spam"
a = [c * i for (i, c) in enumerate(s)]
print(a)

运行结果:

['', 'p', 'aa', 'mmm']

 

posted @ 2017-08-07 14:00  耳木东木2  阅读(222)  评论(0编辑  收藏  举报