Дополнительно
Доступ к индексу в 'for' циклах?
Как получить доступ к индексу в цикле for
, как показано ниже?
ints = [8, 23, 45, 12, 78]
for i in ints:
print('item #{} = {}'.format(???, i))
Я хочу получить следующий вывод:
item #1 = 8
item #2 = 23
item #3 = 45
item #4 = 12
item #5 = 78
Когда я перебираю его с помощью цикла for
, как мне получить доступ к индексу цикла, от 1 до 5 в данном случае?
3289
19
Использование дополнительной переменной состояния, такой как индексная переменная (которую вы обычно используете в таких языках, как C или PHP), считается непитоническим.
Лучшим вариантом будет использование встроенной функции
enumerate()
, доступной как в Python 2, так и в Python 3:Подробнее смотрите в PEP 279.
Используйте
перечисление
, чтобы получить индекс элемента как перебрать:И обратите внимание, что Python'ы индексы начинаются с нуля, так что вы получите 0 до 4 С выше. Если вы хотите количество, от 1 до 5, сделать это:
Управление потоком Unidiomatic
Что вы просите за это в подходящие для Python эквивалентно следующей, которая является алгоритмом большинство программистов низкого уровня языки бы использовать:
Или на языках, которые не имеют для каждого цикла:
или иногда чаще (но unidiomatically) нашли в Python:
Используйте перечислить функции
Питон'ы
перечислить
функция уменьшает визуальный беспорядок, скрывая учета индексов и инкапсуляция метод в другой метод (вперечислить
объект), что дает два пункта кортеж из индекса и позиции, что оригинальный метод обеспечит. Это выглядит так:Этот пример кода является довольно хорошо [канонической][2] пример разницы между кодом, идиоматические Python и код, который не. Идиоматические код сложный (но не сложную) на Python, написанный в том смысле, что он был предназначен, чтобы использоваться. Идиоматические код, как ожидается, дизайнерами языке, что означает, что этот код обычно не более читабельным, но и более эффективным.
Получаем граф
Даже если вы Don'т нужна индексы, как вы идете, но вам нужно количество итераций (иногда желательно) можно начать с
1
и окончательное число будет ваш счет.Граф, кажется, больше, чем вы намерены просить (в отличие от индекса), когда ты сказал, что хочешь от 1 до 5.
Разбить его - шаг за шагом объяснение
Чтобы разбить эти примеры, скажем, у нас есть список вещей, которые мы хотим выполнить итерации с индексом:
Теперь мы передаем это итерируемый перечислять, создавая объект перечислять:
Мы можем вытащить первый элемент из этого повторяемое, что мы получим в цикле с "Далее" функции:
И мы видим, мы получаем кортеж
0
, первый индекс, и `'Это', Первый пункт:мы можем использовать то, что называется Я как "распаковка последовательности&; для извлечения элементов из этих двух кортежей:
и когда мы осматриваем
индекс
, мы находим это относится к первым индексом 0, ивещи
относится к первому пункту,'Это'
.Заключение
Так что это:
[2]: http://python.net/~Гуджер/проекты/команда PyCon/2007/идиоматические/раздаточный материал.индекс-элемент-2-перечислить на
Это'ы довольно просто запустить его от
1
кроме0
:Примечание
Важный намек, хоть немного ввести в заблуждение, поскольку
индекс
будетКортеж
`(индекс, элемент) здесь. Хороший, чтобы пойти.Как норма, в Python есть несколько способов сделать это. Во всех примерах предполагается:
ЛСТ = [1, 2, 3, 4, 5]
Используя перечислить (рассмотрены наиболее идиоматические)
для индекса, элемента перечисления(ЛСТ):
делай то, что нужно делать здесь
Это также самый безопасный вариант на мой взгляд, потому что шанс попасть в бесконечную рекурсию была ликвидирована. Оба элемента и его индекса хранятся в переменных и нет необходимости писать дополнительно код для доступа к элементу.
Создаем переменную для хранения индекса (используя
по
)для индекса в диапазон(лен(ЛСТ)): # или xrange
вам придется писать дополнительный код, чтобы получить элемент
Создаем переменную для хранения индекса (через
а
)индекс = 0 в то время как индекс < лен(ЛСТ):
вам придется писать дополнительный код, чтобы получить элемент
индекс += 1 # избежать бесконечной рекурсии
Всегда есть другой путь
Как уже говорилось, есть и другие способы для этого, которые не были описаны здесь, и они могут даже применить в других ситуациях. электронная.г использование модуле itertools.цепи С для. Он обрабатывает вложенные циклы лучше, чем другие примеры.
Старый способ:
Понимание списка:
Самый быстрый способ получить доступ к индексам списка в цикле в Питон 2.7 использовать выбор метода для малых списков и перечисление Метод для среднего и огромного размера списков.
Пожалуйста, см. различные подходы, который может использоваться, чтобы выполнить итерации через список и указатель доступ к Value и показатели эффективности (который я думаю будет полезным для вас) в образцах ниже код:
Показатели производительности для каждого метода ниже:
В результате, используя метод
спектр
- самый быстрый из них до список с 1000 элементов. Список с размером и GT; 10 000 наименованийперечислить
является победителем.Добавив некоторые полезные ссылки ниже:
https://stackoverflow.com/questions/94935/what-is-the-difference-between-range-and-xrange-functions-in-python-2-x
https://stackoverflow.com/questions/4852944/what-is-faster-for-loop-using-enumerate-or-for-loop-using-xrange-in-python
https://stackoverflow.com/questions/11990105/rangelenlist-or-enumeratelist
Прежде всего, индексы будут от 0 до 4. Языки программирования начать отсчет с 0; Дон'т забывайте, что и вы столкнетесь с индекса за исключением границ. Все, что вам нужно в цикле for переменная подсчета от 0 до 4, Как так:
Имейте в виду, что я писал от 0 до 5, потому что цикл останавливается один номер до максимум. :)
Чтобы получить значение по индексу
По данным этой дискуссии: http://bytes.com/topic/python/answers/464012-objects-list-index
Счетчик цикла итерации
Нынешние идиомы на циклы по индексам использует встроенный в
диапазоне
функция:Перебирая обоих элементов и показателей может быть достигнуто либо старой идиомой или с помощью новой
молния
встроенная функция:или
через http://www.python.org/dev/peps/pep-0212/
Вы можете сделать это с помощью этого кода:
Используйте этот код, если вам нужно сбросить значение индекса в конце цикла:
Лучшее решение этой проблемы использовать перечислить встроенные функции Python. <БР> перечислить возвращение кортеж <БР> первое значение является индекс <БР> второе значение - элемент массива по этому индексу
Здесь's то, что вы получаете, когда вы'индекс считывают В
для
петли:Надеюсь, что это помогает.
Если бы мне пришлось перебирать
нумс = [1, 2, 3, 4, 5]
я бы сделалИли сделать длину по мере того как
Л = лен(нумс)
Если нет повторяющихся значений в списке:
Вы также можете попробовать это:
Выход
В вашем вопросе, вы пишите "как мне получить доступ к индексу цикла, от 1 до 5 в этом случае?&ьquot;
Однако индекс для списка выполняется с нуля. Так, то мы должны знать, что вы действительно хотите это индекс и элемент для каждого элемента в списке, или, действительно ли вы хотите числами начиная с 1. К счастью, в Python, это легко сделать один или оба.
Во-первых, проясним,
перечислить
функция последовательно возвращает индекс и соответствующий элемент для каждого элемента в списке.Выходные данные выше, то, `нет 0 1 1 2 2 3 3 4 4 5 `` Обратите внимание, что индекс в диапазоне от 0. Этот вид индексирования является распространенным среди современных языков программирования, включая Python и C.
Если вы хотите, чтобы ваши петли, чтобы охватить части списка, вы можете использовать стандартный синтаксис Python для часть списка. Например, в цикле от второго элемента в списке до, но не включая последний элемент, вы могли бы использовать
Обратите внимание, что в очередной раз, этот показатель составляет от 0,
нет 0 2 1 3 2 4 `` Это подводит нас к началу=переключатель П для перечисления()
. Это просто смещение индекса, вы можете эквивалентно просто добавьте номер индекса внутри цикла.для которых выход `нет 1 1 2 2 3 3 4 4 5 5 ``
Вы можете использовать метод
index
Редактировать Подчеркнул в комментарии, что этот метод не работает, если есть дубликаты в ИНЦ
, этот метод должен работать для любого значения в
целых чисел`:Или же
если вы хотите узнать индекс и значение в ИНЦ` в виде списка кортежей.
Он использует метод
перечислить
в выбранном ответ на этот вопрос, но с пониманием списка, что делает его быстрее, с меньшим количеством кода.Для печати кортеж (индекс, значение) в понимании списка, используя цикл
for
:Выход:
Это служит цели достаточно хорошо: