[英]Change the first index of each sublist in a list
更改列表中每個子列表的第一個索引。 從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
有人可以幫我建立這個嗎?
有一些簡單的代碼可能對您有用:
data = [['45', 'gh', 'tg'], ['23', 'gf', 'gzs'], ['21', 'xzs', 'gd']]
for i in range (len(data)):
data[i][0] = i + 1
您可以使用列表枚舉和枚舉來獲取索引。 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)]
Bazingaa的答案可能是理想的解決方案,但這是使用map
的另一種超級低效方式。 (我只是認為解決問題時了解其他解決方案很重要。)
list(map(lambda sublist: [data.index(sublist) + 1] + sublist[1:], data))
# => [[1, 'gh', 'tg'], [2, 'gf', 'gzs'], [3, 'xzs', 'gd']]
使用enumerate
來迭代列表您可以傳遞參數枚舉以從1
開始編號,在這種情況下應從1
開始
[[idx,lis[1],lis[2]] for idx,lis in enumerate(data,1)]
我覺得這更具可讀性,
for index,l in enumerate(data):
data[index][0] = index+1
print(data)
# output
[[1, 'gh', 'tg'], [2, 'gf', 'gzs'], [3, 'xzs', 'gd']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.