社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python切片和替换

HelloWorld • 5 年前 • 1482 次点击  

我试图更好地理解python切片,以及它如何在数组变异的上下文中工作。这个到位了吗?是O(1)内存还是更少?这条线上发生了什么?

例如,如果nums是数组,f是整数。在哪里? nums = [1, 2, 3, 4, 5, 6, 7] f = 3 .

nums[:] = nums[-f:] + nums[:-f] 

nums[:] 使用内存?我知道 nums[-f:] + nums[:-f] 基于f重新分配值,但是加法的作用是什么?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46070
 
1482 次点击  
文章 [ 1 ]  |  最新文章 5 年前
ggorlen
Reply   •   1 楼
ggorlen    5 年前

这将根据 f . [-f:] 提取最后一个 f 作为新列表的列表元素和 [:-f] 将列表的开头提取到 len(nums) - f 作为一个新的列表。

nums[:] 使用内存临时存储删除的对象( recycle_on_stack / recycle )把新的复制到列表中。 [:] 意味着我们要穿越整个建筑 norig 是名单的全部长度,我们必须

s = norig * sizeof(PyObject *);
memcpy(recycle, &item[ilow], s);

在整个名单上。见 source code .

切片赋值发生变化 nums in place ,有点像拼接操作,但在本例中没有必要使用它,因为直接赋值将获得相同的结果:

nums = nums[-f:] + nums[:-f]

+ 在这种情况下 list concatenation . 操作将创建并返回一个新列表。但是,自从 小精灵 如果被覆盖,则其上一个值将转到垃圾收集器(如果没有其他对象引用它)。

我在数至少4整本 纽斯 在上面的例子中(这两个切片相加为一个,一个用于连接,另两个用于切片分配)。