Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
4 / 5 / 3
Регистрация: 03.11.2012
Сообщений: 173

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

14.02.2018, 17:03. Показов 5546. Ответов 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
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
16.02.2018, 13:04
Цитата Сообщение от spyphy Посмотреть сообщение
там речь шла про реальный код, а не какую-то вымышленную ахению, которая не понятно для чего нужна.
Любая новая технология для неопытного может показаться "вымышленной ахинеей, которая непонятно для чего нужна".
Ведите себя поспокойнее, сударь. Можно подумать, вас тут кто-то уговаривает пользоваться enumerate против воли.
0
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
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
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
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
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
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
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
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
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
17.02.2018, 20:05
Код пишет один программист, а читают его потом обычно десятки программистов. Поэтому нужно писать не так, как нравится, а правильно.
1
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru