有没有更好的方法来枚举列表中的列表?
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
不是很清楚
我需要为列表中的每个列表插入一个代表索引值的项目。
所以,我有这个:
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
不是很清楚