Ответ 1
Используйте встроенную функцию enumerate
: http://docs.python.org/library/functions.html#enumerate
Для меня очень часто перебирать список 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 способы сделать это?
Используйте встроенную функцию enumerate
: http://docs.python.org/library/functions.html#enumerate
Используйте 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)
Как и все остальные:
for i, val in enumerate(data):
print i, val
но также
for i, val in enumerate(data, 1):
print i, val
Другими словами, вы можете указать начальное значение для индекса/счетчика, сгенерированного перечислением(), который вам может пригодиться, если вы не хотите, чтобы ваш индекс начинался со значения нуля по умолчанию.
Я печатал строки в файле на днях и указывал начальное значение как 1 для enumerate()
, что имело больше смысла, чем 0 при отображении информации о конкретной строке для пользователя.
enumerate
- это то, что вы хотите:
for i, s in enumerate(S):
print s, i
>>> for i, s in enumerate(S):
enumerate()
делает это красивее:
for index, value in enumerate(S):
print index, value
Подробнее см. здесь.