这是什么意思?

and*_*riy 87 python arrays syntax slice

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

pop = population[:]
Run Code Online (Sandbox Code Playgroud)

手段.它是像Java中的数组列表还是像二维数组?可以感谢一些帮助,谢谢.

Sve*_*ach 105

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

  • 以防万一:切片返回浅拷贝. (13认同)
  • `list(l)`总是有效,更具可读性,并且保证即使使用像`numpy.array这样的东西也能返回副本. (12认同)
  • @ilius:也许`l.copy()`更具可读性,但它不起作用. (4认同)

Tho*_*asH 27

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


mgi*_*son 14

嗯...这真的取决于背景.最终,它将sliceobject(slice(None,None,None))传递给以下方法之一: __getitem__,__setitem____delitem__.(实际上,如果对象有一个__getslice__,将用于代替__getitem__,但现在已弃用,不应使用).

对象可以使用切片执行他们想要的操作.

在以下情况下:

x = obj[:]
Run Code Online (Sandbox Code Playgroud)

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

x = obj[slice(None,None,None)]
Run Code Online (Sandbox Code Playgroud)

(虽然前者可能更有效,因为它不需要查找slice构造函数 - 它都是在字节码中完成的).

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

下一个:

x[:] = obj
Run Code Online (Sandbox Code Playgroud)

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

而且,我想你可能会猜到:

del x[:]
Run Code Online (Sandbox Code Playgroud)

电话;-).

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

x[1:4]
Run Code Online (Sandbox Code Playgroud)

结构体 slice(1,4,None)

x[::-1]
Run Code Online (Sandbox Code Playgroud)

构造slice(None,None,-1)等等.进一步阅读: 解释Python的切片表示法


Ign*_*ams 10

它是从序列开始到结束的切片,通常产生浅拷贝.

(嗯,不止于此,但你还不需要关心.)


Jim*_*som 6

它创建列表的副本,而不是仅为现有列表分配新名称.


小智 5

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

基本上用于数组切片,理解括号接受变量意味着要显示的值或键,":"用于将整个数组限制或切片为数据包.