2015-03-31 53 views
-3

我应该做到以下几点:枚举函数是如何工作的?

定义一个函数my_enumerate(items)以类似方式的行为与内置enumerate功能。它应该返回对的列表(i, item)其中itemi的第012项,0来源的列表items(请参阅下面的示例)。检查测试用例的功能应该如何工作。你的函数不能调用Python的内置函数enumerate

实例

输入:

ans = my_enumerate([10, 20, 30]) 
print(ans) 

输出:

[(0, 10), (1, 20), (2, 30)] 
+1

如果你应该这样做,为什么问这里? – RemcoGerlich 2015-03-31 12:46:59

+1

你是什么意思*“它是如何工作的”*?你想知道[它做了什么](https://docs.python.org/2/library/functions.html#enumerate)? [它如何实现](https://hg.python.org/cpython/file/ec6c812fbc1f/Objects/enumobject.c),...?这与'zip(范围(len(items)),items)'一样简单。 – jonrsharpe 2015-03-31 12:50:12

+0

你有什么困难? – 2015-03-31 12:53:15

回答

1

使用itertools.countzip

from itertools import count 

def my_enumerate(values): 
    return list(zip(count(), values)) 
+0

'list()'是不必要的(在Python 2中)。 – mhawke 2015-03-31 12:54:02

2

enumerate是做什么用的?尝试用英语表达它,它可以帮助你理解如何编写必要的代码。如果不这样做,那么将英语语言描述学习成代码的做法将会很有用。

描述enumerate的一种方式是对列表中的每个项目进行迭代,并且对于输入列表中的每个项目,它会在输入列表和项目中生成一对项目的索引。

所以我们知道我们需要遍历列表:

for item in input_list: 
    pass 

而且我们需要保持当前的项目:

index = 0 
for item in input_list: 
    index += 1 

嗯指数的轨迹,有一个更好的办法

for index in range(len(input_list)): 
    pass 

我们产生对:这样做的

for index in range(len(input_list)): 
    pair = index, input_list[index] 

您还需要一个地方来存储这些对:

def my_enumerate(input_list): 
    output_list = [] 
    for index in range(len(input_list)): 
     pair = index, input_list[index] 
     output_list.append(pair) 
    return output_list 

是否有其他的方式来编写产生相同的输出码?是。这是写这个函数的最好方法吗?不是由一个长镜头。这个练习应该帮助你的是将你的想法变成代码,当你获得更多的经验时,你可以一次结合多个步骤,并开始使用更复杂的编程概念。