python中的list遍历--enumerate

这两天看到某个练习中的函数定义,遇到了一个新函数enumerate()

def get_slot(aMap, key, default=None):
    """
    Returns the index, key, and value of a slot found in a bucket.
    Returns -1, key, and default (None if not set) when not found.
    """
    bucket = get_bucket(aMap, key)

    for i, kv in enumerate(bucket):
        k, v = kv #注意这个地方kv是一个含有两个元素的列表,这种等式可以把两个元素先后赋值给k和v
        if key == k:
            return i, k, v

    return -1, key, default


下面来简单解释一下这个函数的用法。参考链接:www.cnblogs.com/vivilisa/archive/2009/03/19/1417083.html

假设我们定义一个list

testlist = ['a', 'b', 'c', 'd']

我们想遍历这个list中的索引和元素(所谓索引,就是testlist[0], testlist[1] 中的,0,1等等 元素位置编号),怎么办呢?

一般情况下会写成:

for i in range(0, len(testlist)):
    print i, testlist[i]

注意range从0开始数,一直数到len(testlist)-1为止


但是这样写呢比较累赘。(其实我觉得蛮好的不知道为啥累赘...),所以就用到了python内置的enumerate()函数了。同样的需求,用新函数可以写成:

for index, text in enumerate(testlist):
    print index, text

循环testlist 返回了此列表的索引和元素内容


enumerate的官方定义如下:

def enumerate(collection): 
    'Generates an indexed series:  (0,coll[0]), (1,coll[1]) ...'      
     i = 0 
     it = iter(collection) 
     while 1: 
     yield (i, it.next()) 
     i += 1

请看,这实际上是一个生成器,不占内存,无限吞吐。(关于yield生成器内容请参看我的 上一篇文章

iter()是迭代器函数,举例:

>>> a = [123, 456, 789]

>>> b = iter(a)

>>> b.next()

123

>>> b.next()

456

>>> b.next()

789

>>> b.next()

Traceback (most recent call last):

    File "", line 1, in ?

StopIteration




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值