有没有更好的方法来枚举列表中的列表?

Is there a better way to enumarate a list within a list?

我需要为列表中的每个列表插入一个代表索引值的项目。

所以,我有这个:

 cfgs = [
         ['pppoe', '1001', 'jon', 'jon123'],
         ['pppoe', '2000', 'joe', 'joe123'],
         ['dhcp', '1001'], ['dhcp', '1000'],
         ['static', '1010', '192.168.2.40', '255.255.255.0', '192.168.2.1', '8.8.8.8', '8.8.4.4'],
         ['sfu', '1001', 'untagged'],
         ['hgu', '1001']
    ]

index = 0
for line in cfgs:
    line = line.insert(0, str(index))
    index += 1

print(cfgs)

并且输出按预期工作并且正是我需要的:

[['0', 'pppoe', '1001', 'jon', 'jon123'], ['1', 'pppoe', '2000', 'joe', 'joe123'], ['2', 'dhcp', '1001'], ['3', 'dhcp', '1000'], ['4', 'static', '1010', '192.168.2.40', '255.255.255.0', '192.168.2.1', '8.8.8.8', '8.8.4.4'], ... ]

我的问题:是否有更好或更 pythonic 的方法来做到这一点?喜欢使用列表理解和枚举?

我尝试用它代替 for 循环:

cfgs = [list(enumerate(line)) for line in cfgs]

但是没有像我预期的那样工作。

[[(0, 'pppoe'), (1, '1001'), (2, 'jon'), (3, 'jon123')], [(0, 'pppoe'), (1, '2000'), (2, 'joe'), (3, 'joe123')],...]

保留 for 循环,但在那里使用 enumerate()

for index, line in enumerate(cfgs):
    line.insert(0, str(index))

也不需要分配line.insert的结果。它没有 return 任何东西,它只是修改了列表,并且分配给 line 没有做任何有用的事情,因为此后从未使用过该变量。

如果你想要一个列表理解,你可以添加列表来连接它们:

[[index] + line for index, line in enumerate(cfgs)]

不过我觉得[index] + line不是很清楚