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

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

14.02.2018, 17:03. Показов 5865. Ответов 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
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
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
4663 / 2082 / 367
Регистрация: 17.03.2012
Сообщений: 10,203
Записей в блоге: 6
16.02.2018, 13:04
Цитата Сообщение от spyphy Посмотреть сообщение
там речь шла про реальный код, а не какую-то вымышленную ахению, которая не понятно для чего нужна.
Любая новая технология для неопытного может показаться "вымышленной ахинеей, которая непонятно для чего нужна".
Ведите себя поспокойнее, сударь. Можно подумать, вас тут кто-то уговаривает пользоваться enumerate против воли.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
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
5439 / 3860 / 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
5439 / 3860 / 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
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.02.2018, 16:11
Код на pypy транслируется в Си, а затем компилируется в машинный код. Вы действительно не видите разницы?
В Си никакого enumerate нет и ваши сравнения производительности разных конструкций из python в данном случае бессмысленны. А производительность тут будет зависеть от используемого компилятора Си, его опций, ОС и т.д.
1
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
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
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
16.02.2018, 17:09
Цитата Сообщение от spyphy Посмотреть сообщение
неуже ли так трудно установить?
Трудно. Релиза нет. Да и бета только 32 битная.

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

Польза от enumerate() не зависит от разницы в скорости выполнения между test2 и test3.
0
Эксперт Python
5439 / 3860 / 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
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
17.02.2018, 05:09
Цитата Сообщение от Garry Galler Посмотреть сообщение
У меня разница по тестам в PyPy для обычного списка вообще пренебрежительно мала, чтобы о ней можно было реально заморачиваться.
Я бы ещё добавил, что те, для кого производительность критична, на питоне писать не будут.
0
17.02.2018, 14:04

Не по теме:

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

0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.02.2018, 14:31
Цитата Сообщение от Black Fregat Посмотреть сообщение
Ну не любит человек enumerate.. Пусть не использует
Не любит? Заставим!
А то слишком народа приходит в python со своим уставом: то им это отступы не нравятся, то это кажется "нинужно"...
Решил кодить на python -
Python
1
import this
и так до просветления.
2
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
17.02.2018, 20:05
Код пишет один программист, а читают его потом обычно десятки программистов. Поэтому нужно писать не так, как нравится, а правильно.
1
Эксперт Python
 Аватар для dondublon
4663 / 2082 / 367
Регистрация: 17.03.2012
Сообщений: 10,203
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru