你也可以做到这一点递归:
>>> myenumerate = lambda l, n=0: [] if not l else (lambda ll = list(l): [(n, ll.pop(0))] + myenumerate(ll, n+1)()
list.pop(n)
返回n
个值组成的列表中,并返回。
唯一的问题是,你必须通以列表:
>>> myenumerate([1,2,3,4,5,6,7,8])
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]
>>> myenumerate("astring")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'str' object has no attribute 'pop'
>>> myenumerate(list("astring"))
[(0, 'a'), (1, 's'), (2, 't'), (3, 'r'), (4, 'i'), (5, 'n'), (6, 'g')]
不过,如果你只是一味地添加来电list
,你我就不会能够复制,而无需使用所需的功能片。
一个绝招绕过这一要求是使用另一个lambda:
>>> myenumerate = lambda l, n=0: [] if not l else (lambda ll: [(n, ll.pop(0))] + myenumerate(ll, n+1))(list(l))
>>> myenumerate("astring")
[(0, 'a'), (1, 's'), (2, 't'), (3, 'r'), (4, 'i'), (5, 'n'), (6, 'g')]
看起来像它应该返回一个字典,索引键。 – duffymo
我错过了什么,或者你是否想重新发明['enumerate()'函数](https://docs.python.org/2/library/functions.html#enumerate)? –
you donwt missing –