这是啥意思?

Posted

技术标签:

【中文标题】这是啥意思?【英文标题】:What does [:] mean?这是什么意思? 【发布时间】:2011-09-04 06:22:02 【问题描述】:

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

pop = population[:]

的意思。它是像 Java 中的数组列表还是像二维数组?

【问题讨论】:

相关,清除列表只能通过执行 del pop[:] 或 pop[:] = [],而不是 pop.clear() ..(就像使用 dicts 一样)。跨度> 对 Python 切片的良好 SO 讨论:***.com/questions/509211/… @Macke:注意:从 Python 3.3 开始,lists 确实提供了clearcopy 方法,相当于分别执行del mylist[:]mylist[:]。一般来说,可变序列不需要它们,因此如果您可能收到任意可变序列,您会希望坚持基于切片的操作,但命名方法至少在 list 上可用。 @ShadowRanger 是的,9 年后。 :-) 【参考方案1】:

这是一个切片符号的示例,它的作用取决于population 的类型。如果population 是一个列表,则此行将创建列表的shallow copy。对于tuplestr 类型的对象,它什么也不做(如果没有[:],该行也会做同样的事情),对于(比如说)NumPy 数组,它将为相同的数据创建一个新视图.

【讨论】:

以防万一:切片返回浅拷贝。 @ilius:也许l.copy() 可读性更强,但它不起作用。 list(l) 始终有效,更具可读性,并且即使使用 numpy.array 之类的内容也可以保证返回副本 @Eli:是的,在 list.clear() 旁边。但是,这将需要一些时间,直到这将导致此类关于 SO 的问题显着减少。 :) @MichaelGraczyk:我假设您在这里谈论的是 NumPy 数组。而不是使用A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)],我几乎总是更喜欢numpy.rollaxis(A, axis, 0)[k]。一般来说,我很少遇到需要直接创建slice() 对象的用例。如果您仍然需要它们,NumPy 会提供 s_ 帮助器作为创建它们的替代方法。【参考方案2】:

了解列表切片通常会复制列表的一部分也可能会有所帮助。例如。 population[2:4] 将返回一个包含人口[2] 和人口[3] 的列表(切片是右排他的)。撇开左右索引,如population[:],它们分别默认为 0 和长度(人口),从而选择整个列表。因此,这是制作列表副本的常用习语。

【讨论】:

【参考方案3】:

嗯...这真的取决于上下文。最终,它将slice 对象(slice(None,None,None)) 传递给以下方法之一:__getitem____setitem____delitem__。 (实际上,如果对象有__getslice__,将使用它而不是__getitem__,但现在已弃用且不应使用)。

对象可以对切片做他们想做的事。

在以下情况下:

x = obj[:]

这将调用obj.__getitem__,并传入切片对象。实际上,这完全等价于:

x = obj[slice(None,None,None)]

(虽然前者可能更高效,因为它不必查找slice 构造函数——这一切都以字节码完成)。

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

下一步:

x[:] = obj

是一种基于obj设置项目的方法(它调用__setitem__)。

而且,我想你可能猜到了什么:

del x[:]

调用 ;-)。

你也可以传递不同的切片:

x[1:4]

构造slice(1,4,None)

x[::-1]

构造slice(None,None,-1) 等等。延伸阅读:Explain Python's slice notation

【讨论】:

【参考方案4】:

从序列的开头到结尾是一个slice,通常产生一个浅拷贝。

(嗯,它是more than that,但你还不需要关心。)

【讨论】:

【参考方案5】:

它会创建列表的副本,而不是为现有列表分配一个新名称。

【讨论】:

【参考方案6】:

[:] 用于数组中的限制器或切片,散列 例如: [1:5] 用于显示介于 1 和 5 之间的值,即 1-4 [开始:结束] 基本用于数组切片,理解括号接受变量,表示要显示的平均值或键,“:”用于将整个数组限制或切片成数据包。

【讨论】:

没有理由提出这样一个老问题,它已经有 5 个类似的答案,甚至是一个已被接受的答案......此外,a[1:5] 返回元素 1-4,而不是 2-4。 @SkamahOne 哦,我不知道。也许不是在这种情况下,但有时提出死问题可能是有价值的。不同的见解,不同的措辞等。在这种情况下,您纠正了答案,他们希望也能学到一些东西。

以上是关于这是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

这是啥意思?

这是啥意思?

请高手解释下这是啥意思

这是啥意思? initWithFrame:CGRectZero]

“getaddrinfo 失败”,这是啥意思?

cd $1:-. 这是啥意思[重复]