这是什么意思?


Answers:


109

它是切片符号的示例,其作用取决于的类型population。如果population是列表,则此行将创建列表的浅表副本。对于类型为tuple或的对象str,它将不执行任何操作(如果不使用,该行将执行相同操作[:]),对于(例如)NumPy数组,它将为相同的数据创建一个新视图。


14
以防万一:切片返回浅拷贝。
安德烈·卡伦

4
@ilius:也许l.copy()更具可读性,但是它不起作用。
Sven Marnach

13
list(l)始终有效,更具可读性,并且即使有类似问题,也可以保证返回副本numpy.array
Rosh Oxymoron

1
@Eli:是的,旁边list.clear()。但是,这将需要一段时间,直到这将导致此类关于SO的问题显着减少。:)
Sven Marnach 2011年

1
@MichaelGraczyk:我想您在这里谈论的是NumPy数组。A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]我几乎总是更喜欢而不是使用numpy.rollaxis(A, axis, 0)[k]。通常,我很少遇到需要直接创建slice()对象的用例。如果仍然需要它们,NumPy会提供s_帮助程序作为创建它们的替代方法。
Sven Marnach 2014年

27

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


15

好吧...这确实取决于上下文。最终,它通过一个slice对象(slice(None,None,None))为以下方法之一: __getitem____setitem____delitem__。(实际上,如果对象具有__getslice__,将代替__getitem__,但现在已弃用,不应使用)。

对象可以对切片执行其所需的操作。

在以下情况下:

x = obj[:]

这将obj.__getitem__使用传入的slice对象进行调用。实际上,这完全等效于:

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

(尽管前者可能更有效,因为它不必查找 slice构造函数-全部用字节码完成)。

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

下一个:

x[:] = obj

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

而且,我想您可能会猜出什么:

del x[:]

致电;-)。

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

x[1:4]

结构体 slice(1,4,None)

x[::-1]

构造slice(None,None,-1)等等。进一步阅读: 解释Python的切片符号




5

[:]
用于限制器或数组中的切片,散列,
例如:
[1:5]用于显示1到5之间的值,即1-4
[start:end]

主要用于数组中的切片,理解方括号接受表示的变量要显示的值或键,“:”用于将整个数组限制或分割为数据包。


1
没有理由去碰这样一个已经有5个相似答案甚至被接受的老问题了……此外,a[1:5]返回元素1-4,而不是2-4。
Skamah 2013年

@SkamahOne哦,我不知道。也许不是在这种情况下,但有时可能会引起死者的问题。不同的见解,不同的措辞等。在这种情况下,您更正了答案,希望他们也能学到一些东西。
Pryftan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.