Список для кортежа с индексом - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть список int с: len = [140, 129, 118, 140, ...]

Я хотел бы преобразовать их в список кортежей, используя их соответствующие индексы

Так что результат выдаст [(0,140),(1,129),(2,118),(3,140)...]

Я пытался сделать это с этим фрагментом:

for i, val in enumerate(len):
    res = [(i,val) for val in len]

Однако, это присваивает окончательное значение индекса каждому кортежу и выводит: [(85, 140), (85, 129), (85, 118), (85, 140)]

Ответы [ 2 ]

6 голосов
/ 24 февраля 2020

Просто используйте list(enumerate(some_list)).

enumerate генерирует кортежи, а вызов list вытягивает все значения из этого генератора в список.

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


Причина, по которой вы видите результаты, заключается в том, что вы полностью заменяете res в каждом l oop, а res включает в себя только индекс итерации.

В первой итерации у вас было i=0 и val=140, а ваш набор значений списка res равен [(0, 140), (0, 129), (0, 118), ...]. Во втором итераторе было i=1 и val=129, и вы установили res на [(1, 140), (1, 129), ...]. Каждый l oop вы просто заменяли res новым списком, используя индекс из l oop, поэтому в конце res использовал последний индекс из l oop (85).


Также, как отмечено в комментарии kaya3 , вы не должны использовать встроенные имена, такие как len (или list) в качестве имен переменных, потому что это помешает вам от обычного использования встроенных функций.

len = [140, 129, 118, ...]
print(len(len))  # error: len is not a function
0 голосов
/ 24 февраля 2020

Следующий даст вам желаемый результат.

final_output = [(i, lis[i]) for i in range(len(lis))]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...