刚开始使用 Kotlin,我喜欢它,但是……我无法理解这种语言中的 Lists 和 Arrys。我对编程并不陌生,不需要解释什么是数组。我不明白的是。
列表和数组有什么区别?它们看起来非常相似,您都使用 [index] 访问它们并以几乎相同的方式使用它们。如果列表是不可变的,那么它们就更加相同,所以......有什么区别?假设列表不是链表,它们的访问时间都是 O(1)。
如果我使用列表;可变和不可变有什么区别?什么时候可以编辑内容?什么时候可以改变长度?
同一事物似乎有许多重叠且令人困惑的名称。List、ListOf、ArrayList、IntArray、intArray...
有人可以列出所有这些列表,并在您使用每一个时给出某种经验法则。具体来说,我发现不可变空列表的概念非常令人困惑。那到底是用来做什么的?
你如何初始化这些东西?
抱歉问了这么长的问题,
谢谢。
我对generateSequenceKotlin 中的感到困惑。我似乎阅读手册都错了:
这是函数签名(用于generateSequence种子):
fun <T : Any> generateSequence(
seed: T?,
nextFunction: (T) -> T?
): Sequence<T>
Run Code Online (Sandbox Code Playgroud)
所以Sequence应该是相同类型的种子,下一个值也应该是下一个迭代代......
但是男人的例子是:
fun fibonacci(): Sequence<Int> {
return generateSequence(Pair(0, 1), { Pair(it.second, it.first + it.second) }).map { it.first }
}
?
println(fibonacci().take(10).toList()) // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Run Code Online (Sandbox Code Playgroud)
所以看起来SequenceisInt的类型是种子 is Pair<Int, Int>。
生成器函数映射Pair<Int, Int>TO Int。下一个值如何发送到生成器,下一个Pair<Int, Int>构造在哪里(生成器的输出是Int...)?
这个函数到底是怎么知道什么时候停止的?生成器永不返回null
我正在尝试做我认为应该简单的事情:
我制作了一个2D列表:
a = [[1,5],[2,6],[3,7]]
Run Code Online (Sandbox Code Playgroud)
我想滑出第一个column并尝试:
1)
a[:,0]
...
TypeError: list indices must be integers or slices, not tuple
Run Code Online (Sandbox Code Playgroud)
2)
a[:,0:1]
...
TypeError: list indices must be integers or slices, not tuple
Run Code Online (Sandbox Code Playgroud)
3)
a[:][0]
[1, 5]
Run Code Online (Sandbox Code Playgroud)
4)
a[0][:]
[1, 5]
Run Code Online (Sandbox Code Playgroud)
5)得到它,但这是这样做的方式吗?
aa[0] for aa in a
Run Code Online (Sandbox Code Playgroud)
使用numpy它很容易,但Python的方式是什么?