2015-03-31 4 views
-3

я должен сделать следующее:Как работает функция перечисления?

Определим функцию my_enumerate(items), которая ведет себя подобным образом, чтобы встроенный в enumerate функции. Он должен вернуть список пар (i, item), где item - i-й элемент, с 0 происхождением, из списка items (см. Примеры ниже). Проверьте тестовые примеры того, как должна работать функция. Ваша функция не должна вызывать встроенную функцию Python enumerate.

Примеры:

Входной сигнал:

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

Выход:

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

Если вы должны это сделать, зачем спрашивать здесь? – RemcoGerlich

+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

+0

С чем вы сталкиваетесь? –

ответ

1

Использование itertools.count и zip:

from itertools import count 

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

'list()' не нужно (в Python 2). – mhawke

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 

Есть ли другие пути, чтобы написать код, который производит такой же вывод? Да. Это лучший способ написать эту функцию? Отнюдь не. То, что это упражнение должно помочь вам, превращает ваши мысли в код, поскольку вы получаете больше опыта в этом, тогда вы можете объединить несколько шагов за раз и начать использовать более сложные концепции программирования.

Смежные вопросы