更改列表中每个子列表的第一个索引。从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
有人可以帮我建立这个吗?
答案 0 :(得分:1)
有一些简单的代码可能对您有用:
data = [['45', 'gh', 'tg'], ['23', 'gf', 'gzs'], ['21', 'xzs', 'gd']]
for i in range (len(data)):
data[i][0] = i + 1
答案 1 :(得分:0)
您可以使用枚举使用枚举来获取索引。 i+1
已完成从1开始的索引,因为在python枚举中默认索引从0开始。
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)]
答案 2 :(得分:0)
Bazingaa的答案可能是理想的解决方案,但这是使用map
的另一种超级低效的方法。 (我只是认为解决问题时了解其他解决方案很重要。)
list(map(lambda sublist: [data.index(sublist) + 1] + sublist[1:], data))
# => [[1, 'gh', 'tg'], [2, 'gf', 'gzs'], [3, 'xzs', 'gd']]
答案 3 :(得分:0)
使用enumerate
遍历列表您可以传递参数以枚举以从1
开头的情况开始编号
[[idx,lis[1],lis[2]] for idx,lis in enumerate(data,1)]
答案 4 :(得分:0)
我觉得这更具可读性,
for index,l in enumerate(data):
data[index][0] = index+1
print(data)
# output
[[1, 'gh', 'tg'], [2, 'gf', 'gzs'], [3, 'xzs', 'gd']]