我正在分析一些Python代码,但我不知道
pop = population[:]
手段。是Java中的数组列表还是二维数组?
我正在分析一些Python代码,但我不知道
pop = population[:]
手段。是Java中的数组列表还是二维数组?
Answers:
它是切片符号的示例,其作用取决于的类型population
。如果population
是列表,则此行将创建列表的浅表副本。对于类型为tuple
或的对象str
,它将不执行任何操作(如果不使用,该行将执行相同操作[:]
),对于(例如)NumPy数组,它将为相同的数据创建一个新视图。
l.copy()
更具可读性,但是它不起作用。
list(l)
始终有效,更具可读性,并且即使有类似问题,也可以保证返回副本numpy.array
list.clear()
。但是,这将需要一段时间,直到这将导致此类关于SO的问题显着减少。:)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]
我几乎总是更喜欢而不是使用numpy.rollaxis(A, axis, 0)[k]
。通常,我很少遇到需要直接创建slice()
对象的用例。如果仍然需要它们,NumPy会提供s_
帮助程序作为创建它们的替代方法。
好吧...这确实取决于上下文。最终,它通过一个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的切片符号
[:]
用于限制器或数组中的切片,散列,
例如:
[1:5]用于显示1到5之间的值,即1-4
[start:end]
主要用于数组中的切片,理解方括号接受表示的变量要显示的值或键,“:”用于将整个数组限制或分割为数据包。
a[1:5]
返回元素1-4,而不是2-4。