Python 从某一点开始递增列表中的数字

Python 从某一点开始递增列表中的数字,python,list,slice,Python,List,Slice,我有一个数字列表,例如[50100150200250]。我需要从指定的索引中按指定的数量递增(或递减)每个数字。我可以通过两种方式做到这一点: from itertools import islice l = [50,100,150,200,250] start_increment_index = 3 l[start_increment_index:] = [e+100 for e in l[start_increment_index:]] print (l) l = [50,100,15

我有一个数字列表,例如
[50100150200250]
。我需要从指定的索引中按指定的数量递增(或递减)每个数字。我可以通过两种方式做到这一点:

from itertools import islice

l = [50,100,150,200,250]
start_increment_index = 3

l[start_increment_index:] = [e+100 for e in l[start_increment_index:]]
print (l)

l = [50,100,150,200,250]

l[start_increment_index:] = [e+100 for e in islice(l,start_increment_index,len(l))]
print (l)
两种打印:
[50100150300350]

但是,我的真实列表包含数百万个数字,此操作会使用不同的索引和不同的增量/减量重复执行。有没有更快的方法使用Python列表来实现这一点?我一直在考虑编写自己的C/C++扩展来处理这个问题


编辑:对于Python来说,这是一个有用的模块吗?有一个用C编写的函数,它可以接受参数
(python\u list\u object、increment\u amount、start\u index、end\u index)

,具体取决于您的目标。我想您可以在这种情况下使用段树。有关更多信息,请参阅

只是简单描述一下。此结构表示将在其上执行范围操作的数组(如带数字的加法/减法子数组)。此结构针对具有大量此类范围查询的情况进行了优化


注意:如果您只想使用python列表结构,那么您可以实现稀疏表(这是另一个段树视图,隐式地将树存储在数组中)

解决方案中的主要问题是创建(分配内存+复制)两个列表。首先是列表本身的理解,其次是内部的
l[start\u increment\u index::

如果您的数据源是python列表,则可以对O(n)执行以下操作:


注意:首先定义
increment

如果问Python问题,不要添加不相关的语言标记(如C或C++)。如果你写了一个C或C++模块,那么你可以使用(相关)标签来解决它。检查Python的数组结构,它是一个高效的数值数组。如果你需要最好的性能,你应该编写一个C/C++程序(算法简单,可能是一个小线程可优化)。否则,如果你的目标是完成这一项工作,就坚持这个脚本,等待答案;一般来说,这取决于数字有多大(比如数百万或万亿),以及您认为您将使用此脚本/程序的次数。如果您仅少量访问列表,则可以将增量存储在二元搜索树中(
TreeSet
在Java中,不确定Python的等价物是什么)。通过这种方式,您可以从列表中获取某些索引的初始值,以及从树中获取该索引之前的所有增量,并根据需要计算数字。在尝试编写C扩展之前,您应该尝试使用解释器运行代码。这是一种提高速度的简单方法。但是,如果您的代码已经依赖于某些C扩展,那么它可能无法工作。
for i in range(start_increment_index, len(l)):
    l[i] += increment