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']