Например, у меня есть list = ['a', 'b', 'c'].
Я хочу список indexed(list) == [(1, 'a'), (2, 'b'), (3, 'c)].
Есть ли встроенный или модуль для этого?
Нет, это запрос из определения enumerate() для самой функции, в то время как это запрашивает функцию перечисления.






Вы можете перечислить его, выполнив следующие действия:
for i,n in enumerate(list):
# where i is the index and n is the value of the list
Для этого вы можете использовать встроенную функцию перечислить.
In [1]: a = ['a', 'b', 'c']
In [2]: b = [(idx, item) for idx,item in enumerate(a)]
In [3]: b
Out[3]: [(0, 'a'), (1, 'b'), (2, 'c')]
Примечание: индекс по умолчанию будет начинаться с 0, но вы можете попробовать добавить start=1 в конфигурацию, например.
In [4]: c = [(idx, item) for idx,item in enumerate(a, start=1)]
In [5]: c
Out[5]: [(1, 'a'), (2, 'b'), (3, 'c')]
Надеюсь, поможет.
Enumerate принимает аргумент для изменения начального значения индекса, если это необходимо.
Вы можете сделать что-то вроде
indexed_list = [(i + 1, elem) for i, elem in enumerate(your_list)]
Я предполагаю, что вам нужно, чтобы индекс начинался с 1. В противном случае вы можете просто выполнить понимание списка по результатам enumerate напрямую, не добавляя 1 к индексу.
Обновлено: обновлено в соответствии с предложением @pault, т.е. с использованием встроенного аргумента
indexed_list = [indexed for indexed in enumerate(your_list, 1)]
Или просто
indexed_list = list(enumerate(your_list, 1))
enumerate принимает необязательный аргумент, указывающий индекс, с которого следует начать
Код ниже - это то, что вы хотите:
>>>l = ['a', 'b', 'c']
>>>indl = [(i + 1, val) for i, val in enumerate(l)]
>>> indl
[(1, 'a'), (2, 'b'), (3, 'c')]
Обновлено: согласно предложению @pault, код изменен, как показано ниже:
>>> yourList = ['a', 'b', 'c']
>>> listInd = [(i, val) for i, val in enumerate(yourList, 1)]
>>> listInd
[(1, 'a'), (2, 'b'), (3, 'c')]
>>>
enumerate принимает необязательный аргумент, указывающий индекс, с которого следует начать
Вы также можете использовать enumerate и его начальный аргумент:
l = ['a', 'b', 'c']
indexed_list = list(enumerate(l, 1))
Что касается функции под названием indexed, вы можете сделать ее
Примечание!Никогда не заменяйте встроенное ключевое слово! list список является одним из них
>>> def indexed(l, start=1):
... return list(enumerate(l, start))
>>> l = ['a', 'b', 'c']
>>> indexed(l)
[(1, 'a'), (2, 'b'), (3, 'c)]
По умолчанию это начальное значение 1.
Индексы в Python начинаются с 0, а не с 1. Вы можете делать то, что хотите, используя встроенную функцию zip() вместе с функцией генератора count() в модуле itertools.
Также необходимо явно преобразовать результат zip() в list, если вы этого хотите (поэтому я изменил имя вашей переменной на my_list, чтобы она не «прятала» встроенный класс с тем же именем — хороший что нужно сделать всегда):
from itertools import count
my_list = ['a', 'b', 'c']
indexed_my_list = list(zip(count(), my_list))
print(indexed_my_list) # -> [(0, 'a'), (1, 'b'), (2, 'c')]
Непонятно, зачем вам это нужно, потому что вы можете использовать встроенную функцию enumerate() для получения индексов всякий раз, когда они необходимы, как показано в ряде других ответов.
Использовать понимание списка и перечислять
[(i,l) for i,l in enumerate(list)]
Возможный дубликат Что означает enumerate()?