Python切片和替换

Python切片和替换,python,Python,我试图更好地理解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重新分配值,但加法的作用是什么?这会根据f将列表分成两半[-f:]将列表的最后一个f元素提取为新列表,[:-f]将列表的开头提取

我试图更好地理解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重新分配值,但加法的作用是什么?

这会根据
f
将列表分成两半
[-f:]
将列表的最后一个
f
元素提取为新列表,
[:-f]
将列表的开头提取为新列表

nums[:]
使用内存临时存储删除的对象(
recycle\u on_stack
/
recycle
),并将新对象复制到列表中
[:]
意味着我们遍历整个结构,这意味着
norig
是列表的完整长度,我们必须

s = norig * sizeof(PyObject *);
memcpy(recycle, &item[ilow], s);
在整个名单上。看

切片分配会发生变异
nums
,有点像拼接操作

+
在此上下文中是。该操作创建并返回一个新列表


在上面的示例中,我计算了至少4个完整的NUM副本(两个片加起来是一个,一个用于连接,另两个用于片分配)。

这将根据
f
将列表分成两半
[-f:]
将列表的最后一个
f
元素提取为新列表,
[:-f]
将列表的开头提取为新列表

nums[:]
使用内存临时存储删除的对象(
recycle\u on_stack
/
recycle
),并将新对象复制到列表中
[:]
意味着我们遍历整个结构,这意味着
norig
是列表的完整长度,我们必须

s = norig * sizeof(PyObject *);
memcpy(recycle, &item[ilow], s);
在整个名单上。看

切片分配会发生变异
nums
,有点像拼接操作

+
在此上下文中是。该操作创建并返回一个新列表


在上面的示例中,我计算了至少4个完整的
nums副本(两个片加起来就是一个,一个用于连接,另外两个用于片分配)。

对不起,您是否介意在
nums=[1,2,3,4,5,6,7]的情况下解释更多关于
nums[-f:
nums[:-f]
f=3
bc当我打印时(nums[-f:])
它返回
[2,3,4]
当我打印
print时(nums[-f])
它返回
[5,6,7,1]
。为什么?我在看
[1,2,3,4]
[5,6,7]
作为你的例子。噢,对不起,愚蠢的错误!print语句位于错误的位置。未来的学习者需要注意:如果需要的参数是在适当的位置切片数组,则需要nums[:],对不起,当我
print(nums[-f:])时,您是否介意解释有关
nums[-f:]
nums[-f]
的更多信息,如果
nums=[1,2,3,4,5,6,7]
f=3
bc(nums[-f:])
它返回
[2,3,4]
当我打印
print(nums[:-f])
时,它返回
[5,6,7,1]
。为什么?我在看
[1,2,3,4]
[5,6,7]
作为你的例子。噢,对不起,愚蠢的错误!print语句位于错误的位置。请注意:如果所需的参数正在对数组进行切片,则需要nums[:]