标签: slice

切片文字和 make slice 之间的行为有区别吗?

注意: 声明切片还是制作切片?没有回答我的问题,因为它比较切片声明与 make slice,而我的问题比较切片文字与 make slice。这个问题有一个简单的答案,因为裸切片声明创建了一个 nil 切片,但是,如果您仔细阅读下面的问题,我根本不会创建一个 nil 切片。

有两种方法可以创建切片并附加到它。Example 1我下面的代码显示了 as和两种方式Example 2

package main

import (
    "fmt"
)

func main() {
    // Example 1
    a := []int{}
    fmt.Printf("len(a): %d; cap(a): %d; a: %v\n", len(a), cap(a), a)
    a = append(a, 10, 20, 30, 40, 50)
    fmt.Printf("len(a): %d; cap(a): %d; a: %v\n", len(a), cap(a), a)
    
    // Example 2
    b := make([]int, 0)
    fmt.Printf("len(b): %d; cap(b): %d; b: %v\n", len(b), cap(b), b)
    b = append(b, 10, …
Run Code Online (Sandbox Code Playgroud)

go slice

0
推荐指数
1
解决办法
1697
查看次数

使用数组进行 Numpy 过滤

我知道以前已经有人问过这个问题,但似乎没有任何适合我的特定用例的内容。

我有一个 numpy 数组obs,它表示彩色图像并具有 shape (252, 288, 3)

我想将每个非纯黑色的像素转换为纯白色。

我尝试过obs[obs != [0, 0, 0]] = [255, 255, 255]但它给出了以下例外:

ValueError: NumPy boolean array indexing assignment cannot assign 3 input values to the 807 output values where the mask is true

结果与 相同obs[obs[:, :] != [0, 0, 0]] = [255, 255, 255](obs[:, :] != [0, 0, 0]).shape另外,(252, 288, 3)我不明白为什么它不简单(252, 288)(布尔矩阵)。

我考虑过使用,obs[obs != 0] = 255但这不会达到我想要的效果,因为纯绿色 ( [0, …

python arrays numpy image-processing slice

0
推荐指数
1
解决办法
411
查看次数

切片副本改变原始切片

有人可以帮助解释 Golang 内部为什么这段代码会改变原始数组a吗?

func main() {
    a := []int{1,2,3,4}
    b := a
    b = append(b[0:1], b[2:]...)
    fmt.Println(b)
    fmt.Println(a)
}
Run Code Online (Sandbox Code Playgroud)

输出:

[1 3 4]
[1 3 4 4]
Run Code Online (Sandbox Code Playgroud)

我以为b := a会按值传递。提前致谢。

go slice

0
推荐指数
1
解决办法
733
查看次数

如何将类型限制为带索引的类型?

自从 1.18 引入泛型以来,我决定深入研究 Go。我想实现一种仅接受顺序类型 \xe2\x80\x94 数组、切片、映射、字符串的算法,但我无法破解如何实现。

\n

有没有一种方法可以针对涉及可索引性?

\n

generics indexing dictionary go slice

0
推荐指数
1
解决办法
852
查看次数

用可迭代替换切片

s我有一个如下所示的列表:

s = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我正在slice of 's'使用以下代码进行替换:

s[1:4] = [22, 3, 4, 5, 6, 7]
print(s)
Run Code Online (Sandbox Code Playgroud)

输出: [1, 22, 3, 4, 5, 6, 7]

我的理解s[1:4]应该只替换3 elements starting from 1st elementup to but not including 4th element.

假设输出: [1, 22, 3, 4]

python list slice python-3.x

0
推荐指数
1
解决办法
95
查看次数

javascript v8 运行时切片的时间复杂度

根据 MDN

slice() 方法返回数组的一部分的浅表副本

这意味着您可以有效地以时间复杂度将指针返回到起始索引O(1)。但在许多讨论中,我看到了O(n)指定(链接如下)。

链接:

正在研究 v8 实现,但没有得到它。
https://chromium.googlesource.com/v8/v8/+/4.3.49/src/string.js?autodive=0%2F%2F

javascript v8 time-complexity slice

0
推荐指数
1
解决办法
1085
查看次数

`sort.Slice` 顺序是不确定的

我正在尝试使用sort.SliceGo 标准库对字符串切片进行排序。我希望它们按字母顺序排序,我希望空字符串出现在所有其他字符串之后(因此我不能只使用sort.Strings)。

对于 less 函数,我认为这会起作用:

func(i, j int) bool {
    return s[j] == "" || s[i] < s[j]
}
Run Code Online (Sandbox Code Playgroud)

但是,我似乎会根据输入顺序得到随机答案。这是一个 MWE:

package main

import (
    "fmt"
    "math/rand"
    "sort"
    "time"
)

func main() {
    s := []string{"", "foo", "bar", "baz"}

    rand.Seed(time.Now().Unix())
    rand.Shuffle(len(s), func(i, j int) {
        s[i], s[j] = s[j], s[i]
    })
    fmt.Printf("%q\n", s)

    sort.Slice(s, func(i, j int) bool {
        return s[j] == "" || s[i] < s[j]
    })
    fmt.Printf("%q\n", s)
}
Run Code Online (Sandbox Code Playgroud)

这是运行几次的输出:

$ go …
Run Code Online (Sandbox Code Playgroud)

sorting string go slice

0
推荐指数
1
解决办法
305
查看次数

为什么 slice(-x,0) 不产生预期的字符串

如果我有这个:

console.log('12345'.slice(-3)); // I get '345'
Run Code Online (Sandbox Code Playgroud)

但当我这样做时:

console.log('12345'.slice(-3, 0)); // I get '' (empty string).
Run Code Online (Sandbox Code Playgroud)

这背后的原因是什么?对我来说完全是无稽之谈。有没有一个 JS API 可以像我在这里期望的那样包裹字符串?(我又期待“345”。)

javascript string slice

0
推荐指数
1
解决办法
52
查看次数

如何使 Rust 函数在 u8 切片上通用 | u32?

我正在努力移植一个具有以下类型别名和函数的 Typescript 库:

type GlkTypedArray = Uint8Array | Uint32Array
get_buffer(buf: GlkTypedArray): number
Run Code Online (Sandbox Code Playgroud)

非常简单,它接受 aUint8Array或 a Uint32Array

u8我现在尝试通过仅为and定义的特征在 Rust 中做同样的事情u32

trait GlkInt: Sized {}
impl GlkInt for u8 {}
impl GlkInt for u32 {}

fn get_buffer(buf: &mut [dyn GlkInt]) -> u32;
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它不允许这样做,说该特质不是Sized,尽管我认为特质定义意味着它会是。

error[E0277]: the size for values of type `dyn misc::GlkInt` cannot be known at compilation time
  --> remglk/src/glkapi/streams.rs:18:29
   |
18 |     fn get_buffer(buf: &mut [dyn GlkInt]) -> u32;
   |                             ^^^^^^^^^^^^ doesn't have …
Run Code Online (Sandbox Code Playgroud)

generics traits slice rust

0
推荐指数
1
解决办法
339
查看次数

为什么它无法通过函数调用修改切片的长度或容量?

我的目的是从特定切片中删除一个元素,代码如下:

func main() {
    s := []int{0, 1, 2, 3, 4}
    remove(s, 3)
    fmt.Println(s, len(s), cap(s))
}

func remove(s []int, idx int) {
    if idx < 0 || idx >= len(s) {
        return
    }
    copy(s[idx:], s[idx+1:])
    s = s[:len(s)-1]
    fmt.Println(s, len(s), cap(s))
}
Run Code Online (Sandbox Code Playgroud)

但输出显示:

[0 1 2 4] 4 5 [0 1 2 4 4] 5 5

据我所知,slice将作为引用类型传递给函数调用,为什么它不能修改它?

function go slice

-1
推荐指数
1
解决办法
89
查看次数