如何将嵌套列表内元素替换为对应子列表的序号?代码求助
解决嵌套列表元素替换为子列表序号的问题
嘿,我来帮你搞定这个需求!你的代码问题出在循环逻辑混乱,还有用了比较运算符==而非赋值运算符=,咱们一步步来理清楚。
你的代码问题分析
你写的三层循环逻辑有明显问题:
for jj in a: for uu in range(0, len(jj)): for k,q in enumerate(a): jj[uu] == k # 这里是比较,不是赋值!而且循环会把k覆盖成最后一个索引
- 第三层循环
for k,q in enumerate(a)会遍历整个列表a,每次循环k都会更新为当前子列表的索引,最后k会变成4(最后一个子列表的索引),所以即使改成赋值jj[uu] = k,所有元素都会被改成4。 - 完全没必要用三层循环,这把简单的问题复杂化了。
正确的实现方法
方法1:Pythonic的列表推导式(推荐)
这种方式简洁高效,一行代码就能搞定:
a = [[6, 8, 12, 15], [2, 5, 13], [1], [5], [6, 15]] b = [[i] * len(sub_list) for i, sub_list in enumerate(a)] print(b) # 输出: [[0, 0, 0, 0], [1, 1, 1], [2], [3], [4, 4]]
逻辑解释:
enumerate(a)会同时返回每个子列表的索引i和子列表本身sub_list[i] * len(sub_list)会生成一个长度和原列表相同,所有元素都是i的新列表- 最后把这些新列表组合起来,就是你要的结果
b
方法2:普通循环(适合新手理解)
如果觉得列表推导式有点抽象,用普通循环也能实现:
a = [[6, 8, 12, 15], [2, 5, 13], [1], [5], [6, 15]] b = [] for index, sub_list in enumerate(a): # 创建一个和原列表长度一致,元素都是当前索引的新列表 new_sub = [] for _ in sub_list: new_sub.append(index) # 或者更简单的写法:new_sub = [index] * len(sub_list) b.append(new_sub) print(b)
这个逻辑更直观:遍历每个子列表的索引,然后为每个子列表生成一个全是当前索引的新列表,再添加到结果b中。
内容的提问来源于stack exchange,提问作者wayne64001
相关产品推荐
相关产品推荐

