如何更改不同索引中的每个嵌套列表?

假设我有清单:

    lst = [[1,1,1], [1,1,1], [1,1,1], [1,2,3], [1,2,3], [1,2,3]] # 3n sublists

我希望它是:

    [[2,1,1], [1,2,1], [1,1,2], [2,2,3], [1,3,3], [1,2,4]]

这个想法是向每个子列表添加 1,如下所示:

每次我按 0,1,2 的顺序更改另一个子列表时:

lst[i][0 or 1 or 2] += 1 根据子列表的顺序。例如:第一个子列表将是 lst[0] [0] += 1

第 4 个子列表将是:lst[3] [0] += 1

大列表有3n长度的子列表3

我试过了

    lst = [[1,1,1], [1,1,1], [1,1,1]]            
    for i in range(len(lst)):
            for j in (0,1,2):
            lst[i][j] += 1

它返回

    [[2, 2, 2], [2, 2, 2], [2, 2, 2]]

而不是

    [[2,1,1], [1,2,1], [1,1,2]]

因为我遍历了每个子列表,遍历了其中的每个元素。更改了我想要的对象后,如何继续到第二个子列表?


牛魔王的故事
浏览 86回答 4
4回答

尚方宝剑之说

您可以使用列表推导:lst = [[1,1,1], [1,1,1], [1,1,1], [1,2,3], [1,2,3], [1,2,3]]new_lst = [[k+1 if j == i%3 else k for j, k in enumerate(a)] for i, a in enumerate(lst)]输出:[[2, 1, 1], [1, 2, 1], [1, 1, 2], [2, 2, 3], [1, 3, 3], [1, 2, 4]]

墨色风雨

你想要的是使用zip:lst = [[1,1,2], [1,2,1], [1,1,1]]            for i,j in zip(range(len(lst)), (0,1,2)):     lst[i][j] += 1lst#[[2, 1, 2], [1, 3, 1], [1, 1, 2]]

蝴蝶不菲

你可以用一个简单的for循环来做到这一点,无需使用zip或enumeratefor i in range(len(lst)):    lst[i][i] += 1print(lst) # [[2, 1, 2], [1, 3, 1], [1, 1, 2]]

慕尼黑5688855

这是一种使用enumerate.前任:lst = [[1,1,2], [1,2,1], [1,1,1]]for idx, v in enumerate(lst):    v[idx] += 1print(lst)输出:[[2, 1, 2], [1, 3, 1], [1, 1, 2]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python