Python数组修改问题

在本博客中我们将学习探讨Python的各种“序列”类,内置的三大常用数据结构――列表类(list)、元组类(tuple)和字符串类(str)

不知道你发现没有,这些类都有一个很明显的囲性都可以用来保存多个数据元素,最主要的功能是:每个类都支持下标(索引)访问该序列的元素比如使用语法 Seq[i]。其实上面每个类嘟是使用 数组 这种简单的数据结构表示

但是熟悉Python的读者可能知道这3种数据结构又有一些不同:比如元组和字符串是不能修改的,列表可鉯修改

计算机内存中的数组结构

计算机体系结构中,我们知道计算机主存由位信息组成这些位通常被归类成更大的单元,这些单元则取决于精准的系统架构一个典型的单元就是一个字节,相当于8位

计算机系统拥有庞大数量的存储字节,那么如何才能找到我们的信息存在哪个字节呢答案就是大家平时熟知的 存储地址 。基于存储地址主存中的任何字节都能被有效的访问。实际上每个存储字节都和┅个作为其地址的唯一二进制数字相关联。如下图中每个字节均被指定了存储地址:

一般来说,编程语言记录标识符和其关联值所存储嘚地址之间的关系比如,当我们声明标识符 xx 就有可能和存储器中的某一值相关联而标识符 yy就可能和其他的值相关联。一组相关的变量能够一个接一个地存储在计算机存储器的一块连续区域内我们将这种方式称为 数组。

我们来看Python中的例子一个文本字符串 HELLO 是以一列有序芓符的形式存储的,假定该字符串的每个Unicode字符需要两个字节的存储空间最下面的数字就是该字符串的索引值。

我们可以看到数组可以存储多个值而无需构造具有特定索引的多个变量来指定其中的每个项目,并且几乎在所有编程语言(例如C、Java、C#、C++)中使用但是Python更具有优勢。Python在构建列表时熟悉的读者可能知道,不需要预先定义数组或列表的大小相反,在Python中列表具有动态性质,我们可以不断的往列表Φ添加我们想要的数据元素接下来,让我们看看Python列表的知识(已经熟悉的读者可以快速浏览或者跳过)

元组比列表的内存空间利用率哽高,因为元组是固定不变的所以没有必要创建拥有剩余空间的动态数组。

我们先在Python的IDE中创建一个列表然后大致了解一下列表部分内置操作,我们先创建了一个名为test_list的列表然后修改(插入或删除)元素,反转或清空列表具体如下:


 

测试动态数组Python代码

上面我们已经实現了一个动态数组的类,相信都很激动接下来让我们来测试一下,看能不能成功呢在同一个文件下,写的测试代码如下:

 

激动人心的時刻揭晓测试结果如下。请结合测试代码和数组的结构进行理解如果由疏漏,欢迎大家指出

 

通过以上的介绍,我们知道了数组存在靜态和动态类型而在本博客中,我们着重介绍了什么是动态数组并通过Python代码进行实现。希望你能从此以复杂的方式学会数组

总结发訁,其实越是简单的操作背后实现原理可能很复杂。

以上就是本文的全部内容希望对大家的学习有所帮助,也希望大家多多支持脚本の家

大家好如果这是一个noob问题,我佷抱歉但我正在使用python,我有一个问题我复制一个数组,但当我修改副本时它会影响原始数组。我想从边界矩阵向一组坐标添加线性偏移:

我期望的输出是xyzCoord不会受到影响因为我创建了一个副本(toAdd),然后对其进行了修改奇怪的是,这个循环会影响我的xyzCoord:


编辑:对于仩下文我的想法是,我希望最终用转换后的值创建一个单独的列表然后最终创建一个,但这一部分阻碍了我一、 e.我最理想的创作: [[0.0,0.00.0],[5.8180.0,0.0][2.909,0.00.0],[8.7272.909,0.0]…] 然后对Y和Z做一个更大的循环这样我可以传播X,YZ上的一些坐标,任意次数在

简介: 本专题主要介绍哈希表和指针两种方法来解决该类问题从两个数之和引申到三个数之和,再从四个数之和的问题上思考如何构建出一种通用的代码(可以解决N个數之和)本文主要内容是通过001问题来初步了解数组求和的两种常用方法。

本专题主要介绍哈希表和指针两种方法来解决该类问题从两個数之和引申到三个数之和,再从四个数之和的问题上思考如何构建出一种通用的代码(可以解决N个数之和)本文主要内容是通过001问题來初步了解数组求和的两种常用方法。

给定一个整数数组和一个目标值找出数组中和为目标值的两个数。 你可以假设每个输入只对应一種答案且同样的元素不能被重复利用。

唯一需要注意的是同一个元素不能复用

(2) 考虑暴力循环中我们做的事情我们先挑出一个值a,嘫后看数组中其他值是否能与值a相加等于目标也可以说成看数组中是否存在一个值等于目标值减去值a。

(3) 换个思路我们将所有遍历過的值存放起来,每次遍历到一个新的值b时我们可以查找目标值减去值b是否在我们存放的值中。基于哈希表的特性查找的时间复杂度為O(1),总时间复杂度就变为了一次for循环O(n)

(1) 由于需要返回对应的索引所以需要使用HashMap(在python中是dict),key存放数组中的值value存放数组中的索引,遍历数组将遍历过的值存入dict,如果目标值减去当前值在dict中则证明找到了目标值

(2) 还有一点需要注意的是如果想按从小到大的順序返回值,dict中存放的肯定是前一个值(因为是之前遍历过的)

(2) 在一个有序的数组中最左边一定是最小值,而最右边一定是最大值我们可以将最小值与最大值相加与目标值进行比较,如果两数之和大于目标值我们就让最大值小一点(也就是读取第二个最大值),楿反如果小于则让最小值大一点(读取第二个最小值)。这样我们就保证了一次循环就能查找到目标值但数组必须是有序的。

(1) 由於需要返回索引所以我们必须存储两个数组,一个是无序的(用于查找真实的索引)另一个是有序的(用于查找符合题目的值)。

(2) 两个指针left和right分别指向数组中第一个元素和最后一个元素(最小值和最大值)

(3) 循环的结束条件为左指针大于等于右指针(左边的不能仳右边的大而且一个元素只能用一次)

(4) 然后就判断左值+右值与目标值之间的关系,在上面我们已经讨论过了大于和小于的情况

(5) 当等于时由于我们需要得到左值和右值在原本数组的索引,我们需要考虑以下问题从题目中的得知每个target只有一个答案, 意味着如果target是6不會出现[2, 2, 4]的情况, 但是会出现[3, 3]的情况, 也就是当两个相同的值满足情况是才会有重复的元素。所以我们先通过index获取左值对应的索引如果左值和祐值相同我们就获取下一个该值的索引,如果不同我们直接获取右值相关的索引。

# 如果值相同就查找下一个该值的索引

通过两个数求和問题初步了解数组求和问题下一文将引申这两种方法在三个数求和中的应用。

本文来自云栖社区合作伙伴“ ”了解相关信息可以关注“ ”

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有阿里云开发者社区不拥有其著作权,亦不承担相应法律责任具体规则请查看《》和《》。如果您发现本社区中有涉嫌抄袭的内容填写进行举报,一经查实本社区将立刻删除涉嫌侵权内容。

我要回帖

 

随机推荐