0

0

Python 二维数组元素修改:避免引用陷阱

碧海醫心

碧海醫心

发布时间:2025-08-29 20:47:01

|

421人浏览过

|

来源于php中文网

原创

python 二维数组元素修改:避免引用陷阱

本文旨在帮助读者理解并解决 Python 中修改二维数组元素时遇到的“所有行元素同时改变”的问题。通过分析问题的根源——列表的引用特性,我们将提供一种创建真正独立的二维数组的方法,并给出修改后的代码示例,确保对数组元素的修改只影响目标位置,从而实现预期的功能。

在 Python 中,创建二维数组时,如果直接使用乘法操作符复制列表,可能会导致所有行引用同一个列表对象。这意味着修改其中一行中的元素,会影响到所有行。要解决这个问题,需要确保每一行都是一个独立的列表。

问题分析:列表的引用

原代码中使用 white_board.append(white_board[0]) 创建二维数组,这种方式实际上是将 white_board[0] 的引用添加到 white_board 中多次。因此,white_board 中的所有行都指向同一个列表对象。修改任何一行,实际上修改的是同一个列表对象,所以所有行都会受到影响。

立即学习Python免费学习笔记(深入)”;

解决方案:创建独立的列表

要创建真正的二维数组,需要确保每一行都是一个独立的列表对象。可以使用列表推导式来实现这一点:

white_board = [[0] * 100 for _ in range(100)]

这段代码会创建 100 个独立的列表,每个列表包含 100 个 0。这样,修改任何一行都不会影响到其他行。

论论App
论论App

AI文献搜索、学术讨论平台,涵盖了各类学术期刊、学位、会议论文,助力科研。

下载

完整代码示例

以下是修改后的完整代码,解决了二维数组元素修改的问题:

white_board = [[0] * 100 for _ in range(100)]

n = int(input())
posL = []  # dot's position List

for _ in range(n):
    a, b = map(int, input().split())
    posL.append((a, b))

for y in posL:
    indY = 100 - y[1]
    for _ in range(10):
        indX = y[0] - 1
        for _ in range(10):
            if white_board[indY][indX] == 0:
                white_board[indY][indX] = 1
            indX += 1
        indY -= 1

total_inked_area = sum(row.count(1) for row in white_board)
print(total_inked_area)

代码解释:

  1. white_board = [[0] * 100 for _ in range(100)]: 使用列表推导式创建了一个 100x100 的二维数组,每个元素初始化为 0。
  2. n = int(input()): 读取输入的点的数量。
  3. posL = []: 创建一个空列表,用于存储点的坐标。
  4. for _ in range(n):: 循环读取每个点的坐标。
  5. a, b = map(int, input().split()): 读取点的 x 和 y 坐标。
  6. posL.append((a, b)): 将点的坐标添加到 posL 列表中。
  7. for y in posL:: 循环遍历每个点。
  8. indY = 100 - y[1]: 计算 y 坐标对应的数组索引。
  9. for _ in range(10):: 循环 10 次,表示正方形的 10 行。
  10. indX = y[0] - 1: 计算 x 坐标对应的数组索引。
  11. for _ in range(10):: 循环 10 次,表示正方形的 10 列。
  12. if white_board[indY][indX] == 0:: 检查当前位置是否为 0。
  13. white_board[indY][indX] = 1: 如果当前位置为 0,则将其设置为 1。
  14. indX += 1: 更新 x 坐标索引。
  15. indY -= 1: 更新 y 坐标索引。
  16. total_inked_area = sum(row.count(1) for row in white_board): 计算二维数组中 1 的总数,即被覆盖的面积。
  17. print(total_inked_area): 打印被覆盖的面积。

注意事项:

  • 理解列表的引用特性是避免此类问题的关键。
  • 在创建二维数组时,务必确保每一行都是独立的列表对象。
  • 列表推导式是创建独立列表的有效方法。

总结:

通过使用列表推导式创建独立的二维数组,可以避免因列表引用导致的元素修改问题。在处理二维数组时,务必注意列表的引用特性,确保代码的正确性和可预测性。 本文提供了一种通用的解决方案,可以应用于各种需要修改二维数组元素的场景。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.09.27

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

781

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

483

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

545

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

113

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

200

2025.08.29

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

344

2023.10.25

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

32

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号