Python切片和替换
我试图更好地理解python切片,以及它如何在变异数组的上下文中工作。这一切都准备好了吗?是O(1)内存还是更少?这条线里发生了什么 例如,如果nums是数组,f是整数。其中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]将列表的开头提取
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[:]