如何重新赋值嵌套于其他列表中的列表元素?
嵌套列表元素修改方法
listOfLists[0][2]的索引写法本身是正确的,正常情况下直接赋值就可以修改第一个子列表的第三个元素,示例:
list1 = [1,2,3] list2 = [4,5,6] listOfLists = [list1, list2] # 直接赋值修改 listOfLists[0][2] = 99 print(listOfLists) # 输出 [[1, 2, 99], [4, 5, 6]] print(list1) # 输出 [1,2,99],原列表同步修改,因为嵌套列表存储的是原列表的引用
如果该写法未生效,优先排查两个问题:
- 赋值后是否在其他位置重新覆盖了
listOfLists或对应子列表的变量值 - 生成
listOfLists时是否用了深拷贝/浅拷贝切断了和原list1、list2的引用关联
如果需要批量遍历修改嵌套列表元素,for循环的写法分两种常见场景:
批量修改所有子列表的指定位置元素
比如要把每个子列表的第三个元素统一修改为0:
for sub_list in listOfLists: # 通过子列表的索引直接赋值,不要直接给sub_list变量重新赋值 sub_list[2] = 0 print(listOfLists) # 输出 [[1, 2, 0], [4, 5, 0]]
注意:循环中如果写
sub_list = [0,0,0]这类给循环临时变量整体赋值的代码,不会改动原嵌套列表的内容,必须通过索引定位到元素位置修改才会生效。
按条件遍历修改匹配的元素
比如要把所有子列表中值为3的元素替换为100,需要两层循环遍历:
# 外层遍历拿到每个子列表的索引 for outer_idx in range(len(listOfLists)): # 内层遍历拿到子列表内每个元素的索引 for inner_idx in range(len(listOfLists[outer_idx])): if listOfLists[outer_idx][inner_idx] == 3: listOfLists[outer_idx][inner_idx] = 100 print(listOfLists) # 输出 [[1, 2, 100], [4, 5, 6]]
内容的提问来源于stack exchange,提问作者fezki
相关产品推荐
相关产品推荐

