You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:快速实现二维列表(矩阵)中0与1互换的最优方法

最快实现矩阵0/1翻转的方法

嘿,你的需求本质就是对矩阵里的每个元素做0和1的取反操作(1变0,0变1),嵌套for循环确实在矩阵规模大的时候会很慢——毕竟Python的显式循环本身开销就不低。下面给你两种高效的实现方案,根据你的场景选就行:

1. 用NumPy(首选,大矩阵下速度碾压纯Python)

如果你的项目可以引入第三方库,那NumPy绝对是最快的选择。它的向量化操作是用底层C实现的,完全避开了Python循环的开销,速度能提升几个数量级。

代码示例:

import numpy as np

# 你的原始矩阵
my_mat = [[1, 1, 1, 0, 0], [0, 1, 0, 1], [1, 0, 1]]
# 转成NumPy数组
np_matrix = np.array(my_mat)
# 直接执行取反操作:1减去每个元素,逻辑直观且高效
flipped_np = 1 - np_matrix
# 如果需要转回普通列表格式
flipped_list = flipped_np.tolist()

print(flipped_list)
# 输出结果:[[0, 0, 0, 1, 1], [1, 0, 1, 0], [0, 1, 0]]

这里也可以用按位取反~np_matrix,不过要注意按位取反会把1变成-2,0变成-1,所以需要再加1后取模2:(~np_matrix + 1) % 2,显然1 - np_matrix更直观易懂。

2. 纯Python优化(无依赖,适合小矩阵或不能用第三方库的场景)

如果不能用NumPy,那用嵌套列表推导式替代显式循环是最优解——列表推导式是Python内置的优化语法,比你写的嵌套for循环快很多,而且代码更简洁。

代码示例:

my_mat = [[1, 1, 1, 0, 0], [0, 1, 0, 1], [1, 0, 1]]
# 一行完成翻转:遍历每一行,对每个元素执行1-val的取反
flipped_mat = [[1 - val for val in row] for row in my_mat]

print(flipped_mat)
# 输出结果:[[0, 0, 0, 1, 1], [1, 0, 1, 0], [0, 1, 0]]

顺便提下你原代码的小问题

你原来写的循环:

for my_row in my_mat:
    for my_val in my_row:
        my_val = 1 if my_val == 0 else 0

其实根本没修改原矩阵!因为my_val是元素的副本,不是对原矩阵元素的引用——你只是修改了循环变量的值,原矩阵里的元素完全没变。上面的两种方法都是直接生成正确的翻转后矩阵,不会有这个问题。

内容的提问来源于stack exchange,提问作者Panuwat Assawinjaipetch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:47:45