slice

How to read slicing with negative step

谁说胖子不能爱 提交于 2020-03-16 06:13:36
问题 I have already seen some questions about slicing, but haven't seen a helpful answer concerning some of them, which I can't manage to understand very well. Let's say we have this list a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] And I slice it in the following way: a[:8:-1] #Ouput: [9] Why? We give it an end of 8, and a step of -1. How come it behaves in this way? 回答1: If you omit the first part of the slice expression, it defaults to None . When it comes time for list.__getitem__ to interpret what

How to read slicing with negative step

百般思念 提交于 2020-03-16 06:11:30
问题 I have already seen some questions about slicing, but haven't seen a helpful answer concerning some of them, which I can't manage to understand very well. Let's say we have this list a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] And I slice it in the following way: a[:8:-1] #Ouput: [9] Why? We give it an end of 8, and a step of -1. How come it behaves in this way? 回答1: If you omit the first part of the slice expression, it defaults to None . When it comes time for list.__getitem__ to interpret what

go range详解

好久不见. 提交于 2020-03-10 13:32:29
1. 前言 range是Golang提供的一种迭代遍历手段,可操作的类型有数组、切片、Map、channel等,实际使用频率非常高。 探索range的实现机制是很有意思的事情,这可能会改变你使用range的习惯。 2. 热身 按照惯例,我们看几个有意思的题目,用于检测对range的了解程度。 2.1 题目一:切片遍历 下面函数通过遍历切片,打印切片的下标和元素值,请问性能上有没有可优化的空间? func RangeSlice(slice []int) { for index, value := range slice { _, _ = index, value } } 程序解释: 函数中使用for-range对切片进行遍历,获取切片的下标和元素素值,这里忽略函数的实际意义。 参考答案: 遍历过程中每次迭代会对index和value进行赋值,如果数据量大或者value类型为string时,对value的赋值操作可能是多余的,可以在for-range中忽略value值,使用slice[index]引用value值。 2.2 题目二:Map遍历 下面函数通过遍历Map,打印Map的key和value,请问性能上有没有可优化的空间? func RangeMap(myMap map[int]string) { for key, _ := range myMap { _, _ = key,

go slice切片引用类型详解

守給你的承諾、 提交于 2020-03-06 04:43:45
Golang的引用类型包括 slice、map 和 channel 。它们有复杂的内部结构,除了申请内存外,还需要初始化相关属性。 内置函数 new 计算类型大小,为其分配零值内存,返回指针。而 make 会被编译器翻译成具体的创建函数,由其分配内存和初始化成员结构,返回对象而非指针。 package main func main ( ) { a := [ ] int { 0 , 0 , 0 } // 提供初始化表达式。 a [ 1 ] = 10 b := make ( [ ] int , 3 ) // make slice b [ 1 ] = 10 c := new ( [ ] int ) c [ 1 ] = 10 // ./main.go:11:3: invalid operation: c[1] (type *[]int does not support indexing) } 引用类型 变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。 获取指针类型所指向的值,使用:” * “ 取值符号 。比如:var p int, 使用*p获取p指向的值 ** 指针、slice、map、chan **等都是引用类型。 new和make的区别 make 用来创建map、slice、channel new 用来创建值类型 new 和 make 均是用于分配内存:

25个JavaScript数组方法代码示例

岁酱吖の 提交于 2020-03-05 16:03:46
摘要: 通过代码掌握数组方法。 原文: 通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏) 译者:前端小智 Fundebug 经授权转载,版权归原作者所有。 要在给定数组上使用方法,只需要通过 [].方法名 即可,这些方法都定义在 Array.prototype 对象上。在这里,咱们先不使用这些相,反,咱们将从简单的方法开始定义自己的版本,并在这些版本的基础上进行构建。 没有比把东西拆开再重新组装起来更好的学习方法了。注意,当咱们的实现自己的方法时,不要覆盖现有的方法,因为有的库需要它们,并且这样也方便比较咱们自己的方法与原始方法的差异。 所以不要这样命名咱们自定义的方法: Array.prototype.map = function map() { // implementation }; 最好这样命名: function map(array) { // implementation } 咱们也可以通过使用 class 关键字并扩展 Array 构造函数来实现咱们的方法,如下所示: class OwnArray extends Array { public constructor(...args) { super(...args); } public map() { // implementation return this; } } 唯一的区别是

卷积神经网络python实现

て烟熏妆下的殇ゞ 提交于 2020-03-02 10:50:05
以下实现参考吴恩达的作业。 一、 padding def zero_pad(X, pad): """ Pad with zeros all images of the dataset X. The padding is applied to the height and width of an image, as illustrated in Figure 1. Argument: X -- python numpy array of shape (m, n_H, n_W, n_C) representing a batch of m images pad -- integer, amount of padding around each image on vertical and horizontal dimensions Returns: X_pad -- padded image of shape (m, n_H + 2*pad, n_W + 2*pad, n_C) """ X_pad = np.pad(X, ((0,0),(pad,pad),(pad,pad),(0,0)), 'constant', constant_values=(0,0)) return X_pad   从zero_pad的函数中,我们可以看出,我们只需要对原图片矩阵进行padding操作

go语言学习-数组, slice和map

空扰寡人 提交于 2020-02-29 14:35:25
数据结构 数组 slice map 数组为值传递,当赋值给另外一个变量的时候是将值全部都copy,存一个副本,改变副本的值不会改变原有数组。slice为指针传递,改变值会改变原有slice中存的值 数组 数组定义后 长度固定 长度获取: len() 函数 所有的值类型变量在赋值,和作为参数传递时都将产生一次复制动作。 go数组是一个值类型,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所 传入数组的一个副本 在数组中类型和长度共同确定一个数组类型,也就是说[5]int 和[10]int 不是一个类型 创建 声明: var myArray [5]int 推导: myArray := [3]int{1, 2, 3} 省略方式: myArray := [...]int{1,2,3} slice 切片 创建 从数组上切一片, slice1 = myArray[:5] 使用make, slice2 := make([]int, 5) 默认方式: slice3 := []int{1, 2, 3, 4, 5}, 事实上回创建一个匿名数组,不需要我们管 从切片上切一片: slice4 = slice1[:7] // 可以超过原有len(),但是不能超过cap(),多出来的部分补上零值(0) 添加 append 使用 append 添加元素: mySlice2 := []int{8, 9,

Go基础系列:Go slice详解

半腔热情 提交于 2020-02-29 09:24:22
slice表示切片(分片),例如对一个数组进行切片,取出数组中的一部分值。在现代编程语言中,slice(切片)几乎成为一种必备特性,它可以从一个数组(列表)中取出任意长度的子数组(列表),为操作数据结构带来非常大的便利性,如python、perl等都支持对数组的slice操作,甚至perl还支持对hash数据结构的slice。 但Go中的slice和这些语言的slice不太一样,前面所说的语言中,slice是一种切片的操作,切片后返回一个新的数据对象。而Go中的slice不仅仅是一种切片动作, 还是一种数据结构 (就像数组一样)。 slice的存储结构 Go中的slice依赖于数组,它的底层就是数组,所以数组具有的优点,slice都有。且slice支持可以通过append向slice中追加元素,长度不够时会动态扩展,通过再次slice切片,可以得到得到更小的slice结构,可以迭代、遍历等。 实际上slice是这样的结构:先创建一个有特定长度和数据类型的底层数组,然后从这个底层数组中选取一部分元素,返回这些元素组成的集合(或容器),并将slice指向集合中的第一个元素。换句话说, slice自身维护了一个指针属性,指向它底层数组中的某些元素的集合 。 例如,初始化一个slice数据结构: my_slice := make([]int, 3,5) // 输出slice fmt

Go:复合数据类型

此生再无相见时 提交于 2020-02-28 21:27:51
文章目录 1、数组 2、Slice 3、Map 1、数组 数组是一个由 固定长度 的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。 Go语言中很少直接使用数组。和数组对应的类型是 Slice(切片) ,它是可以增长和收缩动态序列,slice功能也更灵活。 内置的len函数将返回数组中元素的个数 默认情况下,数组的每个元素都被初始化为元素类型 对应的零值 如果在数组的长度位置出现的是“…”省略号,则表示数组的长度是根据初始化值的个数来计算,,比如: q := [ ... ] int { 1 , 2 , 3 } //[3]int 可以直接通过==比较运算符来比较两个数组,只有当两个数组的所有元素都是相等的时候数组才是相等的。 关于函数入参: 当调用一个函数的时候,函数的每个调用参数将会被赋值给函数内部的参数变量,所以函数参数变量接收的是 一个复制的副本 ,并不是原始调用的变量。因为函数参数传递的机制导致 传递大的数组类型 将 是低效的 ,并且对数组参数的任何的修改都是发生在复制的数组上,并不能直接修改调用时原始的数组变量。 当然,我们可以显式地传入一个数组指针,那样的话函数通过指针对数组的任何修改都可以直接反馈到调用者。 关于函数入参是值传递还是引用传递可参考: 飞雪无情 2、Slice 概念 Slice(切片)代表变长的序列,序列中每个元素都有相同的类型。

浅谈javascript的Array.prototype.slice.call

你说的曾经没有我的故事 提交于 2020-02-22 18:07:32
浅谈javascript的Array.prototype.slice.call 作者:myvin 字体:[ 增加 减小 ] 类型:转载 时间:2015-08-31 我要评论 发现大多人都用了Array.prototype.slice.call(argments,0),一直不明白这句是干什么的。而昨天温习了slice()方法,再参考Function.call(thisArg[, arg1[, arg2[, ...]]]),还是不得而知(我脑筋转得慢:|)。 写字前面 在js中我们经常会看到Array.prototype.slice.call(arguments,0)的写法,当然,这个方法的作用也许大家都明白,那就是把类数组对象转换成一个真正的数组。关于这个方法,我说说自己的理解。 这里涉及到slice()方法和call()方法,所以先简单说说这两个方法。 slice()方法 数组和字符串都有这个slice方法,这个方法的作用是截取一段数据。它接收两个参数,第一个参数是要截取的位置索引,第二参数可选,表示要截取到的结束位置,但是不包括结束位置。在数组中,该方法的返回值是包含截取元素的组成的数组,在字符串中,该方法的返回值是包含截取字符串组成的字符串。 该方法也可以传入负数值,当参数为负数的时候,将参数和数组或字符串的长度相加得到的正数作为实际的参数。 如下: ? 1 2 3 [1,2