Как добавить индексы в список?

Например, у меня есть list = ['a', 'b', 'c'].
Я хочу список indexed(list) == [(1, 'a'), (2, 'b'), (3, 'c)].

Есть ли встроенный или модуль для этого?

Возможный дубликат Что означает enumerate()?

pault 02.07.2019 03:54

Нет, это запрос из определения enumerate() для самой функции, в то время как это запрашивает функцию перечисления.

schuelermine 01.02.2020 14:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
4 495
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Вы можете перечислить его, выполнив следующие действия:

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 принимает аргумент для изменения начального значения индекса, если это необходимо.

probat 02.07.2019 03:33

Вы можете сделать что-то вроде

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 принимает необязательный аргумент, указывающий индекс, с которого следует начать
pault 02.07.2019 03:24

Код ниже - это то, что вы хотите:

>>>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 принимает необязательный аргумент, указывающий индекс, с которого следует начать
pault 02.07.2019 03:25

Вы также можете использовать 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)]

Другие вопросы по теме