Перечислять список как по содержанию, так и по индексу

Для меня очень часто перебирать список python, чтобы получить как содержимое, так и их индексы. Обычно я делаю следующее:

S = [1,30,20,30,2] # My list
for s, i in zip(S, range(len(S))):
    # Do stuff with the content s and the index i

Я нахожу этот синтаксис немного уродливым, особенно частью внутри функции zip. Есть ли еще более элегантные /Pythonic способы сделать это?

Ответ 2

Используйте enumerate():

>>> S = [1,30,20,30,2]
>>> for index, elem in enumerate(S):
        print(index, elem)

(0, 1)
(1, 30)
(2, 20)
(3, 30)
(4, 2)

Ответ 3

Как и все остальные:

for i, val in enumerate(data):
    print i, val

но также

for i, val in enumerate(data, 1):
    print i, val

Другими словами, вы можете указать начальное значение для индекса/счетчика, сгенерированного перечислением(), который вам может пригодиться, если вы не хотите, чтобы ваш индекс начинался со значения нуля по умолчанию.

Я печатал строки в файле на днях и указывал начальное значение как 1 для enumerate(), что имело больше смысла, чем 0 при отображении информации о конкретной строке для пользователя.

Ответ 4

enumerate - это то, что вы хотите:

for i, s in enumerate(S):
    print s, i

Ответ 5

>>> for i, s in enumerate(S):

Ответ 6

enumerate() делает это красивее:

for index, value in enumerate(S):
    print index, value

Подробнее см. здесь.