Изменить первый индекс каждого подсписка в списке - PullRequest
0 голосов
/ 04 ноября 2018

Изменить первый индекс каждого подсписка в списке. от 1,2, 3 ... например -

data = [['45', 'gh', 'tg'], ['23', 'gf', 'gzs'], ['21', 'xzs', 'gd']]

Я хочу получить

data = [[1, 'gh', 'tg'], [2, 'gf', 'gzs'], [3, 'xzs', 'gd']]

, что означает изменение первого индекса каждого подсписка. Я пытался

for subs in data:
i = 0
subs[0] = i + 1

Может ли кто-нибудь помочь мне построить это?

Ответы [ 5 ]

0 голосов
/ 04 ноября 2018

Я считаю это более читабельным,

for index,l in enumerate(data):
    data[index][0] = index+1

print(data)

# output
[[1, 'gh', 'tg'], [2, 'gf', 'gzs'], [3, 'xzs', 'gd']]
0 голосов
/ 04 ноября 2018

Существует простой код, который может оказаться полезным:

data = [['45', 'gh', 'tg'], ['23', 'gf', 'gzs'], ['21', 'xzs', 'gd']]


for i in range (len(data)):

     data[i][0] = i + 1
0 голосов
/ 04 ноября 2018

Ответ Базингаа, вероятно, является идеальным решением, но вот еще один СУПЕР неэффективный способ использования map. (Я просто думаю, что важно знать о других решениях при решении проблемы.)

list(map(lambda sublist: [data.index(sublist) + 1] + sublist[1:], data))
# => [[1, 'gh', 'tg'], [2, 'gf', 'gzs'], [3, 'xzs', 'gd']]
0 голосов
/ 04 ноября 2018

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

[[idx,lis[1],lis[2]] for idx,lis in enumerate(data,1)]
0 голосов
/ 04 ноября 2018

Вы можете использовать понимание списка, используя enumerate, чтобы получить индекс. i+1 сделано для запуска индекса с 1, потому что индекс по умолчанию начинается с 0 в перечислении python.

enumerate возвращает индекс и отдельные элементы перечисляемого списка. j здесь будет список, а j[1] и j[2] будут первым и вторым элементом соответственно.

new_data = [[i+1, j[1], j[2]] for i, j in enumerate(data)]
# [[1, 'gh', 'tg'], [2, 'gf', 'gzs'], [3, 'xzs', 'gd']]

Другая аналогичная альтернатива следующая, где j[1:] относится к остальной части списка от второго элемента до последнего, исключая первый. Затем вы добавляете первый индекс для создания окончательного списка.

new_data = [[i+1] + j[1:] for i, j in enumerate(data)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...