如何在不使用NumPy的情况下实现Python嵌套列表的行循环替换?
不使用NumPy实现嵌套列表行的循环替换
直接生成新列表(最简单方式)
你需要的是把原列表的行按「原第2行→第1行,原第3行→第2行,原第1行→第3行」的顺序重新排列,直接通过索引组合生成新列表就行:
lst = [[0, 0, 1], [0, 2, 3], [5, 2, 3]] # 对应1-based的行顺序:第2行(索引1)、第3行(索引2)、第1行(索引0) lst = [lst[1], lst[2], lst[0]] print(lst)
运行后输出:
[[0, 2, 3], [5, 2, 3], [0, 0, 1]]
原地修改原列表(适合不想重新赋值的场景)
如果要在原列表上直接修改,得先保存被覆盖的原始行,不然会出现数据覆盖丢失的问题:
lst = [[0, 0, 1], [0, 2, 3], [5, 2, 3]] # 先保存原第1行的副本,避免后续修改影响原始数据 first_row = lst[0].copy() # 依次替换行 lst[0] = lst[1] lst[1] = lst[2] lst[2] = first_row print(lst)
输出结果和上面一致。
注意:如果子列表里是可变元素,一定要用
.copy()创建副本;如果是不可变元素,直接赋值也能行,但.copy()是更通用的写法。
关于你遇到的错误
arr[[0, 1]] = arr[[1, 0]]是NumPy数组的专属语法,普通Python列表不支持这种多索引的取值和赋值方式。当你对普通列表用这种写法时,Python会把[0,1]当成一个索引键,而列表只能用整数索引,自然会报错(你碰到的'NoneType' object is not subscriptable大概率是因为变量arr实际是None,或者误用了列表的索引规则)。
内容的提问来源于stack exchange,提问作者tsx
相关产品推荐
相关产品推荐

