Python [:]是什么意思?

Python [:]是什么意思?,python,arrays,syntax,slice,Python,Arrays,Syntax,Slice,我正在分析一些Python代码,我不知道是什么 pop = population[:] 意味着。它类似于Java中的数组列表还是类似于二维数组?它是从序列的开头到结尾的一个数组,通常生成一个浅拷贝 (嗯,是的,但你还不需要在意。)这是切片表示法的一个例子,它的作用取决于总体的类型。如果population是一个列表,则此行将创建该列表的一部分。对于类型为tuple或str的对象,它将不执行任何操作(在没有[:]的情况下,行将执行相同的操作),对于(比如)NumPy数组,它将为相同的数据创建一个

我正在分析一些Python代码,我不知道是什么

pop = population[:]
意味着。它类似于Java中的数组列表还是类似于二维数组?

它是从序列的开头到结尾的一个数组,通常生成一个浅拷贝


(嗯,是的,但你还不需要在意。)

这是切片表示法的一个例子,它的作用取决于
总体的类型。如果
population
是一个列表,则此行将创建该列表的一部分。对于类型为
tuple
str
的对象,它将不执行任何操作(在没有
[:]
的情况下,行将执行相同的操作),对于(比如)NumPy数组,它将为相同的数据创建一个新视图。

它将创建列表的副本,与仅仅为已经存在的列表指定一个新名称相比。

知道列表切片通常会复制列表的一部分也会有所帮助。例如,
population[2:4]
将返回一个包含population[2]和population[3]的列表(切片是右排他的)。撇开左索引和右索引,如在
population[:]
中,它们分别默认为0和length(population),从而选择整个列表。因此,复制列表是一种常见的习惯用法。

嗯。。。这实际上取决于上下文。最后,它将对象(
slice(None,None,None)
)传递给以下方法之一:,或。(实际上,如果对象具有,则将使用它而不是
\uuuu getitem\uuuuu
,但它现在已被弃用,不应使用)

对象可以对切片执行它们想要的操作

在以下方面:

x = obj[:]
这将调用
obj.\uuu getitem\uuu
,并传入slice对象。事实上,这完全等同于:

x = obj[slice(None,None,None)]
(尽管前者可能效率更高,因为它不必查找
片段
构造函数——它都是用字节码完成的)

对于大多数对象,这是一种创建序列一部分的浅拷贝的方法

下一步:

是一种基于
obj
设置项目的方法(它调用
\uuu setitem\uuu

我想你大概可以猜到:

del x[:]
电话;-)

您还可以传递不同的切片:

x[1:4]
构造
切片(1,4,无)

构造
切片(None,None,-1)
等等。进一步阅读:

[:]
用于数组中的限制器或切片,哈希
如:
[1:5]用于显示介于1(包括)和5(排除)之间的值,即1-4
[开始:结束]


基本上在数组中用于切片,了解括号accept变量表示要显示的平均值或键,以及“:”用于限制或将整个数组切片为数据包。

以防万一:切片返回浅层副本。@ilius:可能
l.copy()
可读性更好,但不起作用。
list(l)
始终有效,更具可读性,即使使用类似于
numpy.array
@Eli:Yes的内容,也能保证返回副本,并与
list.clear()一起使用。不过,这需要一段时间,直到这将导致此类问题的显著减少@MichaelGraczyk:我想你在这里谈论的是NumPy数组。与其使用
A[deque(chain((k),repeat(slice(None),len(A.shape)-1)).rotate(axis)]
,我几乎总是更喜欢
numpy.rollaxis(A,axis,0)[k]
。一般来说,我很少遇到需要直接创建
slice()的用例
objects。如果您仍然需要它们,NumPy会提供帮助器作为创建它们的替代方法。相关的,只有通过执行del-pop[:]或pop[:]=[]才能清除列表,而不是pop.clear()…(与dicts一样)很好,关于Python切片的讨论:@Macke:注意:从Python 3.3开始,
list
s确实提供了
clear
copy
方法,相当于执行
del mylist[:]
mylist[:]
分别。通常情况下,可变序列不需要它们,因此如果您可能收到任意可变序列,您可能希望坚持基于切片的操作,但命名方法至少在
列表中可用。
@ShadowRanger是的,9年后。:-)没有理由去碰一个已经有5个相似答案甚至是一个公认答案的老问题。。。此外,
a[1:5]
返回元素1-4,而不是2-4。@SkamahOne哦,我不知道。也许在这种情况下不是这样,但有时提出死问题是有价值的。不同的见解,不同的措辞等等。在这种情况下,你纠正了答案,他们希望也学到了一些东西。
x[1:4]
x[::-1]