4 / 5 / 3
Регистрация: 03.11.2012
Сообщений: 173

Зачем нужна функция enumerate?

14.02.2018, 17:03. Показов 5604. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если нам нужны индексы элементов списка A, то пишем
Python
1
for i in range(0,len(A)):
если не нужны, то
Python
1
for a in A:
Тогда какой смысл вводить в язык еще одну функцию enumerate()?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2018, 17:03
Ответы с готовыми решениями:

Объясните зачем нужна данная функция
Довольно односложный вопрос. Когда и зачем используется данная функция (соответственно, что будет если ее не использовать)? И что...

Зачем нужна Функция, для чего и в каких моментах используется?
можете рассказать в каких моментах понадобиться функция и для чего? и что можно делать с ним чтобы было представление как с ним работать

Что делает функция Enumerate()?
Господа,может кто-нибудь доступно объяснить,что делает это функция <enumerate()>.Предупреждаю сразу,я ламер,так что, пожалуйста,...

40
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
16.02.2018, 01:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от spyphy Посмотреть сообщение
там речь шла про реальный код, а не какую-то вымышленную ахению, которая не понятно для чего нужна.
Это не ахинея, а аналог реального кода.
0
4 / 5 / 3
Регистрация: 03.11.2012
Сообщений: 173
16.02.2018, 12:37  [ТС]
Отвечая на собственный вопрос, я пришел к выводу, что enumerate() имеет смысл с коллекциями типа связный список (на линейных массивах оно не дает никаких приемуществ), но и то только для экономии количества строчек кода, потому что с точки зрения производительности счетчик всё равно рулит. Как-то так)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from collections import deque
 
s = deque([-4, 2, -3, -5, 7, 10, -1]) 
 
def test1():    
    for i in range(len(s)):
        a = i, s[i]
 
def test2():
    for i, d in enumerate(s):
        a = i, d
 
def test3():
    count = 0
    for d in s:
        a = count, d
        count += 1
результат
Code
1
2
3
test1: 4.24459600449
test2: 3.57456994057
test3: 2.62967991829
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,184
Записей в блоге: 6
16.02.2018, 13:04
Цитата Сообщение от spyphy Посмотреть сообщение
там речь шла про реальный код, а не какую-то вымышленную ахению, которая не понятно для чего нужна.
Любая новая технология для неопытного может показаться "вымышленной ахинеей, которая непонятно для чего нужна".
Ведите себя поспокойнее, сударь. Можно подумать, вас тут кто-то уговаривает пользоваться enumerate против воли.
0
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
16.02.2018, 14:01
Цитата Сообщение от spyphy Посмотреть сообщение
enumerate() имеет смысл с коллекциями типа связный список
Неправильный вывод.

Цитата Сообщение от spyphy Посмотреть сообщение
на линейных массивах оно не дает никаких приемуществ
Неправильный вывод. Чтобы убедиться в этом, достаточно приведённые мной выше примеры переписать без использования enumerate().

Цитата Сообщение от spyphy Посмотреть сообщение
но и то только для экономии количества строчек кода
Дело не количестве строк, а в читабельности.
Количество строк существенно влияет на читабельность (но зависит от того, за счёт чего происходит уменьшение количества строк).
В большинстве случаев читабельность кода важнее скорости работы кода. То есть, нормально написанный код почти всегда можно ускорить, но в большинстве случаев это ускорение будет считаться злом.

Цитата Сообщение от spyphy Посмотреть сообщение
[-4, 2, -3, -5, 7, 10, -1]
Я измерил производительность на этом списке, и пришёл к выводу, что быстрая сортировка по скорости существенно уступает сортировке вставками.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
16.02.2018, 14:10
Цитата Сообщение от spyphy Посмотреть сообщение
test1: 4.24459600449
test2: 3.57456994057
test3: 2.62967991829
На каком куркуляторе это запускалось?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.02.2018, 14:24
Цитата Сообщение от ТабуретY Посмотреть сообщение
На каком куркуляторе это запускалось?
Это цифры показывающие n повторных запусков одно и того же кода.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.02.2018, 14:28
Цитата Сообщение от spyphy Посмотреть сообщение
с точки зрения производительности счетчик всё равно рулит
О боже, но я кажется вижу как чей-то мир падает в тартарары...

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if __name__ == "__main__":
    s = deque([i for i in range(1000000)]) 
    s2 = [i for i in range(1000000)] 
    
    setup="from __main__ import test1, test2, test3, s, s2"
    print('test1:',  timeit.timeit('test1(s)', setup=setup,number=3))
    print('test2:',  timeit.timeit('test2(s)', setup=setup,number=3))
    print('test3 :', timeit.timeit('test3(s)', setup=setup,number=3))
    print('test1:',  timeit.timeit('test1(s2)', setup=setup,number=3))
    print('test2:',  timeit.timeit('test2(s2)', setup=setup,number=3))
    print('test3 :', timeit.timeit('test3(s2)', setup=setup,number=3))  
    """
    test1: 74.07750789824419
    test2: 0.4306260096345653
    test3 : 0.5972959676934408
    test1: 0.45880559326029413
    test2: 0.42931033045138633
    test3 : 0.5868087143778098
    """
enumerate всегда быстрее на больших списках.
0
4 / 5 / 3
Регистрация: 03.11.2012
Сообщений: 173
16.02.2018, 15:18  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
enumerate всегда быстрее на больших списках.
ну не всегда.
возможно, просто разработчики pypy не любили функцию enumerate, но у меня на вашем варианте получается немного другой результат:
Python
1
2
3
test1: 41.4063298702
test2: 0.0832080841064
test3: 0.0352368354797
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.02.2018, 15:31
Цитата Сообщение от spyphy Посмотреть сообщение
ну не всегда
Если сравнивать шило и мыло, то - да.
PyPy это отдельная реализация Python.
А то давайте сюда еще подтянем IronPython и посмотрим как там enumerate реализована.
0
4 / 5 / 3
Регистрация: 03.11.2012
Сообщений: 173
16.02.2018, 15:57  [ТС]
если сравнивать производительность, так уж на pypy. смысл запускать это на медленном cpython?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.02.2018, 16:11
Код на pypy транслируется в Си, а затем компилируется в машинный код. Вы действительно не видите разницы?
В Си никакого enumerate нет и ваши сравнения производительности разных конструкций из python в данном случае бессмысленны. А производительность тут будет зависеть от используемого компилятора Си, его опций, ОС и т.д.
1
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
16.02.2018, 16:33
Code
1
2
3
4
5
6
test1: 91.88847853060182
test2: 0.4227795606220326
test3 : 0.5205359708784414
test1: 0.4379379182461349
test2: 0.4054994662871252
test3 : 0.5280720991337375
0
4 / 5 / 3
Регистрация: 03.11.2012
Сообщений: 173
16.02.2018, 16:42  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
test1: 91.88847853060182
test2: 0.4227795606220326
test3 : 0.5205359708784414
test1: 0.4379379182461349
test2: 0.4054994662871252
test3 : 0.5280720991337375
говорю ж, запустити на pypy. (неуже ли так трудно установить?)
0
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
16.02.2018, 17:09
Цитата Сообщение от spyphy Посмотреть сообщение
неуже ли так трудно установить?
Трудно. Релиза нет. Да и бета только 32 битная.

Компилировать без оптимизации не показательно, а нормальный оптимизатор Ваш цикл должен выпилить.

Польза от enumerate() не зависит от разницы в скорости выполнения между test2 и test3.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.02.2018, 18:56
Shamil1,
На сайте pypy написано, что 32-битная версия работает на x64 Windows, нужно только, чтобы была установлена runtime библиотека от MSVS 32-битной версии.
------------------------------------------------------
spyphy,
У меня разница по тестам в PyPy для обычного списка вообще пренебрежительно мала, чтобы о ней можно было реально заморачиваться. А раз так, то читабельность имеет больший приоритет.

Code
1
2
3
4
5
6
7
8
Для queue:
test1: 28.51710448765969
test2:  0.031021591094109624
test3 : 0.02744406717775405
Для list:
test1:  0.05301599046110539
test2:  0.06355722260914476
test3 : 0.0617552950820901
0
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
17.02.2018, 05:09
Цитата Сообщение от Garry Galler Посмотреть сообщение
У меня разница по тестам в PyPy для обычного списка вообще пренебрежительно мала, чтобы о ней можно было реально заморачиваться.
Я бы ещё добавил, что те, для кого производительность критична, на питоне писать не будут.
0
17.02.2018, 14:04

Не по теме:

Я вообще не понимаю, о чём спор. Ну не любит человек enumerate.. Пусть не использует

0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.02.2018, 14:31
Цитата Сообщение от Black Fregat Посмотреть сообщение
Ну не любит человек enumerate.. Пусть не использует
Не любит? Заставим!
А то слишком народа приходит в python со своим уставом: то им это отступы не нравятся, то это кажется "нинужно"...
Решил кодить на python -
Python
1
import this
и так до просветления.
2
Модератор
Эксперт функциональных языков программирования
3137 / 2285 / 469
Регистрация: 26.03.2015
Сообщений: 8,889
17.02.2018, 20:05
Код пишет один программист, а читают его потом обычно десятки программистов. Поэтому нужно писать не так, как нравится, а правильно.
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,184
Записей в блоге: 6
19.02.2018, 14:11
Цитата Сообщение от Garry Galler Посмотреть сообщение
А то слишком народа приходит в python со своим уставом: то им это отступы не нравятся, то это кажется "нинужно".
Думаю, нам тоже надо относиться к этому спокойнее. Каждый сам себе злобный буратино, пусть набивает шишки, сколько хочет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2018, 14:11
Помогаю со студенческими работами здесь

Зачем нужна вертикальная черта в запросе?
К примеру есть следующий запрос: ( "SELECT * FROM zapys WHERE PrizvishcheImyaPobatkovi AND Stat LIKE ('%' || ? || '%') ", ...

Зачем нужна функция SetCursor?
объясните пожалуйста простым языком зачем нужна функция SetCursor, что она делает и при каких условиях используется.

Зачем нужна функция GetPrivateProfileString?
Объяснить "кусочек" кода)), из то го что есть я понял что с начало в комбобокс добавляются значения с помощью функции InserCBItem, далее...

Зачем нужна функция cin.ignore()?
Объясните пожалуйста почему если убрать из кода cin.ignore(); , в 55 строке присваиваем n = 1, оно возвращает к началу, и getline(cin,...

Зачем нужна отдельная многопоточная функция в libcurl?
Здравствуйте. Подскажите пожалуйста зачем в libcurl имеется еще curl_multi_init, (если я правильно понял, это что-то вроде многопоточного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru