它是一个链表,一个数组?我四处搜寻,只发现有人在猜测.我的C知识不足以查看源代码.
我肯定不是我想成为的Python大师,而且我主要是在业余时间学习/试验,很可能我会为有经验的用户提出一个微不足道的问题...但是,我真的很想要理解,这是一个帮助我很多的地方.
现在,在适当的前提下,Python文档说:
4.6.3.可变序列类型
s.append(x)将x附加到序列的末尾(与s [len(s):len(s)] = [x]相同)
[...]
s.insert(i,x)在i给出的索引处将x插入s(与s [i:i] = [x]相同)
此外:
5.1.更多关于列表
list.append(x)将项添加到列表的末尾.相当于[len(a):] = [x].
[...]
list.insert(i,x)在给定位置插入一个项目.第一个参数是要插入的元素的索引,因此a.insert(0,x)插入列表的前面,而a.insert(len(a),x)等同于a.append( x).
所以现在我想知道为什么有两种方法可以做,基本上,同样的事情呢?那岂不是成为可能(和更简单),以只有一个append/insert(x, i=len(this))地方的i将是一个可选的参数,当不存在,就意味着添加到列表的末尾?
假设我有两个列表比另一个更长,x = [1,2,3,4,5,6,7,8]并且y = [a,b,c]我想将y中的每个元素合并到x中的每个第3个索引,因此结果列表z看起来像:z = [1,2,a,3,4,b,5,6,c,7,8]
在python中进行此操作的最佳方法是什么?
此代码示例取大O(N ^ 2)
results = []
for i in range(1000000)
result = [f(i)] + results
Run Code Online (Sandbox Code Playgroud)
此代码示例取大O(N)
results = []
for i in range(1000000)
result = results + [f(i)]
Run Code Online (Sandbox Code Playgroud)
为什么在这两种算法的Big O中存在如此明显的差异,唯一的区别是一个被添加到列表的前面而另一个被添加到列表的后面?
这对Java也适用吗?
我有一个类似的列表
a=[{'time':3},{'time':4},{'time':5}]
Run Code Online (Sandbox Code Playgroud)
我想像这样以相反的顺序得到值的累积和
b=[{'exp':3,'cumsum':12},{'exp':4,'cumsum':9},{'exp':5,'cumsum':5}]
Run Code Online (Sandbox Code Playgroud)
获得这个的最有效方法是什么?我已经阅读了其他答案,其中使用numpy给出了解决方案
a=[1,2,3]
b=numpy.cumsum(a)
Run Code Online (Sandbox Code Playgroud)
但我也需要在字典中插入cumsum
python ×5
list ×2
append ×1
arrays ×1
deque ×1
dictionary ×1
insert ×1
linked-list ×1
numpy ×1
pandas ×1