mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-10 06:10:19 +08:00
deploy
This commit is contained in:
@@ -2559,76 +2559,77 @@
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
<div class="highlight"><span class="filename">my_list.py</span><pre><span></span><code><a id="__codelineno-62-1" name="__codelineno-62-1" href="#__codelineno-62-1"></a><span class="k">class</span> <span class="nc">MyList</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-2" name="__codelineno-62-2" href="#__codelineno-62-2"></a><span class="w"> </span><span class="sd">""" 列表类简易实现 """</span>
|
||||
<a id="__codelineno-62-3" name="__codelineno-62-3" href="#__codelineno-62-3"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<a id="__codelineno-62-4" name="__codelineno-62-4" href="#__codelineno-62-4"></a><span class="w"> </span><span class="sd">""" 构造方法 """</span>
|
||||
<a id="__codelineno-62-5" name="__codelineno-62-5" href="#__codelineno-62-5"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__capacity</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">10</span> <span class="c1"># 列表容量</span>
|
||||
<a id="__codelineno-62-6" name="__codelineno-62-6" href="#__codelineno-62-6"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">:</span> <span class="n">my_list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">__capacity</span> <span class="c1"># 数组(存储列表元素)</span>
|
||||
<a id="__codelineno-62-7" name="__codelineno-62-7" href="#__codelineno-62-7"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># 列表长度(即当前元素数量)</span>
|
||||
<a id="__codelineno-62-8" name="__codelineno-62-8" href="#__codelineno-62-8"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__extend_ratio</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span> <span class="c1"># 每次列表扩容的倍数</span>
|
||||
<a id="__codelineno-62-9" name="__codelineno-62-9" href="#__codelineno-62-9"></a>
|
||||
<a id="__codelineno-62-10" name="__codelineno-62-10" href="#__codelineno-62-10"></a> <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-11" name="__codelineno-62-11" href="#__codelineno-62-11"></a><span class="w"> </span><span class="sd">""" 获取列表长度(即当前元素数量) """</span>
|
||||
<a id="__codelineno-62-12" name="__codelineno-62-12" href="#__codelineno-62-12"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span>
|
||||
<a id="__codelineno-62-13" name="__codelineno-62-13" href="#__codelineno-62-13"></a>
|
||||
<a id="__codelineno-62-14" name="__codelineno-62-14" href="#__codelineno-62-14"></a> <span class="k">def</span> <span class="nf">capacity</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-15" name="__codelineno-62-15" href="#__codelineno-62-15"></a><span class="w"> </span><span class="sd">""" 获取列表容量 """</span>
|
||||
<a id="__codelineno-62-16" name="__codelineno-62-16" href="#__codelineno-62-16"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__capacity</span>
|
||||
<a id="__codelineno-62-17" name="__codelineno-62-17" href="#__codelineno-62-17"></a>
|
||||
<a id="__codelineno-62-18" name="__codelineno-62-18" href="#__codelineno-62-18"></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-19" name="__codelineno-62-19" href="#__codelineno-62-19"></a><span class="w"> </span><span class="sd">""" 访问元素 """</span>
|
||||
<a id="__codelineno-62-20" name="__codelineno-62-20" href="#__codelineno-62-20"></a> <span class="c1"># 索引如果越界则抛出异常,下同</span>
|
||||
<a id="__codelineno-62-21" name="__codelineno-62-21" href="#__codelineno-62-21"></a> <span class="k">assert</span> <span class="n">index</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">index</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">,</span> <span class="s2">"索引越界"</span>
|
||||
<a id="__codelineno-62-22" name="__codelineno-62-22" href="#__codelineno-62-22"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-23" name="__codelineno-62-23" href="#__codelineno-62-23"></a>
|
||||
<a id="__codelineno-62-24" name="__codelineno-62-24" href="#__codelineno-62-24"></a> <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-25" name="__codelineno-62-25" href="#__codelineno-62-25"></a><span class="w"> </span><span class="sd">""" 更新元素 """</span>
|
||||
<a id="__codelineno-62-26" name="__codelineno-62-26" href="#__codelineno-62-26"></a> <span class="k">assert</span> <span class="n">index</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">index</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">,</span> <span class="s2">"索引越界"</span>
|
||||
<a id="__codelineno-62-27" name="__codelineno-62-27" href="#__codelineno-62-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span>
|
||||
<a id="__codelineno-62-28" name="__codelineno-62-28" href="#__codelineno-62-28"></a>
|
||||
<a id="__codelineno-62-29" name="__codelineno-62-29" href="#__codelineno-62-29"></a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-30" name="__codelineno-62-30" href="#__codelineno-62-30"></a><span class="w"> </span><span class="sd">""" 尾部添加元素 """</span>
|
||||
<a id="__codelineno-62-31" name="__codelineno-62-31" href="#__codelineno-62-31"></a> <span class="c1"># 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-62-32" name="__codelineno-62-32" href="#__codelineno-62-32"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span><span class="p">():</span>
|
||||
<a id="__codelineno-62-33" name="__codelineno-62-33" href="#__codelineno-62-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">extend_capacity</span><span class="p">()</span>
|
||||
<a id="__codelineno-62-34" name="__codelineno-62-34" href="#__codelineno-62-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span>
|
||||
<a id="__codelineno-62-35" name="__codelineno-62-35" href="#__codelineno-62-35"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<a id="__codelineno-62-36" name="__codelineno-62-36" href="#__codelineno-62-36"></a>
|
||||
<a id="__codelineno-62-37" name="__codelineno-62-37" href="#__codelineno-62-37"></a> <span class="k">def</span> <span class="nf">insert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-38" name="__codelineno-62-38" href="#__codelineno-62-38"></a><span class="w"> </span><span class="sd">""" 中间插入元素 """</span>
|
||||
<a id="__codelineno-62-39" name="__codelineno-62-39" href="#__codelineno-62-39"></a> <span class="k">assert</span> <span class="n">index</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">index</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">,</span> <span class="s2">"索引越界"</span>
|
||||
<a id="__codelineno-62-40" name="__codelineno-62-40" href="#__codelineno-62-40"></a> <span class="c1"># 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-62-41" name="__codelineno-62-41" href="#__codelineno-62-41"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span><span class="p">():</span>
|
||||
<a id="__codelineno-62-42" name="__codelineno-62-42" href="#__codelineno-62-42"></a> <span class="bp">self</span><span class="o">.</span><span class="n">extend_capacity</span><span class="p">()</span>
|
||||
<a id="__codelineno-62-43" name="__codelineno-62-43" href="#__codelineno-62-43"></a> <span class="c1"># 索引 i 以及之后的元素都向后移动一位</span>
|
||||
<a id="__codelineno-62-44" name="__codelineno-62-44" href="#__codelineno-62-44"></a> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
|
||||
<a id="__codelineno-62-45" name="__codelineno-62-45" href="#__codelineno-62-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-46" name="__codelineno-62-46" href="#__codelineno-62-46"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span>
|
||||
<a id="__codelineno-62-47" name="__codelineno-62-47" href="#__codelineno-62-47"></a> <span class="c1"># 更新元素数量</span>
|
||||
<a id="__codelineno-62-48" name="__codelineno-62-48" href="#__codelineno-62-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<a id="__codelineno-62-49" name="__codelineno-62-49" href="#__codelineno-62-49"></a>
|
||||
<a id="__codelineno-62-50" name="__codelineno-62-50" href="#__codelineno-62-50"></a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-51" name="__codelineno-62-51" href="#__codelineno-62-51"></a><span class="w"> </span><span class="sd">""" 删除元素 """</span>
|
||||
<a id="__codelineno-62-52" name="__codelineno-62-52" href="#__codelineno-62-52"></a> <span class="k">assert</span> <span class="n">index</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">index</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">,</span> <span class="s2">"索引越界"</span>
|
||||
<a id="__codelineno-62-53" name="__codelineno-62-53" href="#__codelineno-62-53"></a> <span class="n">num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-54" name="__codelineno-62-54" href="#__codelineno-62-54"></a> <span class="c1"># 索引 i 之后的元素都向前移动一位</span>
|
||||
<a id="__codelineno-62-55" name="__codelineno-62-55" href="#__codelineno-62-55"></a> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
|
||||
<a id="__codelineno-62-56" name="__codelineno-62-56" href="#__codelineno-62-56"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-57" name="__codelineno-62-57" href="#__codelineno-62-57"></a> <span class="c1"># 更新元素数量</span>
|
||||
<a id="__codelineno-62-58" name="__codelineno-62-58" href="#__codelineno-62-58"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">-=</span> <span class="mi">1</span>
|
||||
<a id="__codelineno-62-59" name="__codelineno-62-59" href="#__codelineno-62-59"></a> <span class="c1"># 返回被删除元素</span>
|
||||
<a id="__codelineno-62-60" name="__codelineno-62-60" href="#__codelineno-62-60"></a> <span class="k">return</span> <span class="n">num</span>
|
||||
<a id="__codelineno-62-61" name="__codelineno-62-61" href="#__codelineno-62-61"></a>
|
||||
<a id="__codelineno-62-62" name="__codelineno-62-62" href="#__codelineno-62-62"></a> <span class="k">def</span> <span class="nf">extend_capacity</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-63" name="__codelineno-62-63" href="#__codelineno-62-63"></a><span class="w"> </span><span class="sd">""" 列表扩容 """</span>
|
||||
<a id="__codelineno-62-64" name="__codelineno-62-64" href="#__codelineno-62-64"></a> <span class="c1"># 新建一个长度为 self.__size 的数组,并将原数组拷贝到新数组</span>
|
||||
<a id="__codelineno-62-65" name="__codelineno-62-65" href="#__codelineno-62-65"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span> <span class="o">+</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span><span class="p">()</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__extend_ratio</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<a id="__codelineno-62-66" name="__codelineno-62-66" href="#__codelineno-62-66"></a> <span class="c1"># 更新列表容量</span>
|
||||
<a id="__codelineno-62-67" name="__codelineno-62-67" href="#__codelineno-62-67"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__capacity</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">)</span>
|
||||
<a id="__codelineno-62-68" name="__codelineno-62-68" href="#__codelineno-62-68"></a>
|
||||
<a id="__codelineno-62-69" name="__codelineno-62-69" href="#__codelineno-62-69"></a> <span class="k">def</span> <span class="nf">to_array</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
|
||||
<a id="__codelineno-62-70" name="__codelineno-62-70" href="#__codelineno-62-70"></a><span class="w"> </span><span class="sd">""" 返回有效长度的列表 """</span>
|
||||
<a id="__codelineno-62-71" name="__codelineno-62-71" href="#__codelineno-62-71"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[:</span><span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-2" name="__codelineno-62-2" href="#__codelineno-62-2"></a><span class="w"> </span><span class="sd">"""列表类简易实现"""</span>
|
||||
<a id="__codelineno-62-3" name="__codelineno-62-3" href="#__codelineno-62-3"></a>
|
||||
<a id="__codelineno-62-4" name="__codelineno-62-4" href="#__codelineno-62-4"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<a id="__codelineno-62-5" name="__codelineno-62-5" href="#__codelineno-62-5"></a><span class="w"> </span><span class="sd">"""构造方法"""</span>
|
||||
<a id="__codelineno-62-6" name="__codelineno-62-6" href="#__codelineno-62-6"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__capacity</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">10</span> <span class="c1"># 列表容量</span>
|
||||
<a id="__codelineno-62-7" name="__codelineno-62-7" href="#__codelineno-62-7"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">:</span> <span class="n">my_list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">__capacity</span> <span class="c1"># 数组(存储列表元素)</span>
|
||||
<a id="__codelineno-62-8" name="__codelineno-62-8" href="#__codelineno-62-8"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># 列表长度(即当前元素数量)</span>
|
||||
<a id="__codelineno-62-9" name="__codelineno-62-9" href="#__codelineno-62-9"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__extend_ratio</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span> <span class="c1"># 每次列表扩容的倍数</span>
|
||||
<a id="__codelineno-62-10" name="__codelineno-62-10" href="#__codelineno-62-10"></a>
|
||||
<a id="__codelineno-62-11" name="__codelineno-62-11" href="#__codelineno-62-11"></a> <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-12" name="__codelineno-62-12" href="#__codelineno-62-12"></a><span class="w"> </span><span class="sd">"""获取列表长度(即当前元素数量)"""</span>
|
||||
<a id="__codelineno-62-13" name="__codelineno-62-13" href="#__codelineno-62-13"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span>
|
||||
<a id="__codelineno-62-14" name="__codelineno-62-14" href="#__codelineno-62-14"></a>
|
||||
<a id="__codelineno-62-15" name="__codelineno-62-15" href="#__codelineno-62-15"></a> <span class="k">def</span> <span class="nf">capacity</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-16" name="__codelineno-62-16" href="#__codelineno-62-16"></a><span class="w"> </span><span class="sd">"""获取列表容量"""</span>
|
||||
<a id="__codelineno-62-17" name="__codelineno-62-17" href="#__codelineno-62-17"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__capacity</span>
|
||||
<a id="__codelineno-62-18" name="__codelineno-62-18" href="#__codelineno-62-18"></a>
|
||||
<a id="__codelineno-62-19" name="__codelineno-62-19" href="#__codelineno-62-19"></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-20" name="__codelineno-62-20" href="#__codelineno-62-20"></a><span class="w"> </span><span class="sd">"""访问元素"""</span>
|
||||
<a id="__codelineno-62-21" name="__codelineno-62-21" href="#__codelineno-62-21"></a> <span class="c1"># 索引如果越界则抛出异常,下同</span>
|
||||
<a id="__codelineno-62-22" name="__codelineno-62-22" href="#__codelineno-62-22"></a> <span class="k">assert</span> <span class="n">index</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">index</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">,</span> <span class="s2">"索引越界"</span>
|
||||
<a id="__codelineno-62-23" name="__codelineno-62-23" href="#__codelineno-62-23"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-24" name="__codelineno-62-24" href="#__codelineno-62-24"></a>
|
||||
<a id="__codelineno-62-25" name="__codelineno-62-25" href="#__codelineno-62-25"></a> <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-26" name="__codelineno-62-26" href="#__codelineno-62-26"></a><span class="w"> </span><span class="sd">"""更新元素"""</span>
|
||||
<a id="__codelineno-62-27" name="__codelineno-62-27" href="#__codelineno-62-27"></a> <span class="k">assert</span> <span class="n">index</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">index</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">,</span> <span class="s2">"索引越界"</span>
|
||||
<a id="__codelineno-62-28" name="__codelineno-62-28" href="#__codelineno-62-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span>
|
||||
<a id="__codelineno-62-29" name="__codelineno-62-29" href="#__codelineno-62-29"></a>
|
||||
<a id="__codelineno-62-30" name="__codelineno-62-30" href="#__codelineno-62-30"></a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-31" name="__codelineno-62-31" href="#__codelineno-62-31"></a><span class="w"> </span><span class="sd">"""尾部添加元素"""</span>
|
||||
<a id="__codelineno-62-32" name="__codelineno-62-32" href="#__codelineno-62-32"></a> <span class="c1"># 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-62-33" name="__codelineno-62-33" href="#__codelineno-62-33"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span><span class="p">():</span>
|
||||
<a id="__codelineno-62-34" name="__codelineno-62-34" href="#__codelineno-62-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">extend_capacity</span><span class="p">()</span>
|
||||
<a id="__codelineno-62-35" name="__codelineno-62-35" href="#__codelineno-62-35"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span>
|
||||
<a id="__codelineno-62-36" name="__codelineno-62-36" href="#__codelineno-62-36"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<a id="__codelineno-62-37" name="__codelineno-62-37" href="#__codelineno-62-37"></a>
|
||||
<a id="__codelineno-62-38" name="__codelineno-62-38" href="#__codelineno-62-38"></a> <span class="k">def</span> <span class="nf">insert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-39" name="__codelineno-62-39" href="#__codelineno-62-39"></a><span class="w"> </span><span class="sd">"""中间插入元素"""</span>
|
||||
<a id="__codelineno-62-40" name="__codelineno-62-40" href="#__codelineno-62-40"></a> <span class="k">assert</span> <span class="n">index</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">index</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">,</span> <span class="s2">"索引越界"</span>
|
||||
<a id="__codelineno-62-41" name="__codelineno-62-41" href="#__codelineno-62-41"></a> <span class="c1"># 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-62-42" name="__codelineno-62-42" href="#__codelineno-62-42"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span><span class="p">():</span>
|
||||
<a id="__codelineno-62-43" name="__codelineno-62-43" href="#__codelineno-62-43"></a> <span class="bp">self</span><span class="o">.</span><span class="n">extend_capacity</span><span class="p">()</span>
|
||||
<a id="__codelineno-62-44" name="__codelineno-62-44" href="#__codelineno-62-44"></a> <span class="c1"># 索引 i 以及之后的元素都向后移动一位</span>
|
||||
<a id="__codelineno-62-45" name="__codelineno-62-45" href="#__codelineno-62-45"></a> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
|
||||
<a id="__codelineno-62-46" name="__codelineno-62-46" href="#__codelineno-62-46"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-47" name="__codelineno-62-47" href="#__codelineno-62-47"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span>
|
||||
<a id="__codelineno-62-48" name="__codelineno-62-48" href="#__codelineno-62-48"></a> <span class="c1"># 更新元素数量</span>
|
||||
<a id="__codelineno-62-49" name="__codelineno-62-49" href="#__codelineno-62-49"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<a id="__codelineno-62-50" name="__codelineno-62-50" href="#__codelineno-62-50"></a>
|
||||
<a id="__codelineno-62-51" name="__codelineno-62-51" href="#__codelineno-62-51"></a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-52" name="__codelineno-62-52" href="#__codelineno-62-52"></a><span class="w"> </span><span class="sd">"""删除元素"""</span>
|
||||
<a id="__codelineno-62-53" name="__codelineno-62-53" href="#__codelineno-62-53"></a> <span class="k">assert</span> <span class="n">index</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">index</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">,</span> <span class="s2">"索引越界"</span>
|
||||
<a id="__codelineno-62-54" name="__codelineno-62-54" href="#__codelineno-62-54"></a> <span class="n">num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-55" name="__codelineno-62-55" href="#__codelineno-62-55"></a> <span class="c1"># 索引 i 之后的元素都向前移动一位</span>
|
||||
<a id="__codelineno-62-56" name="__codelineno-62-56" href="#__codelineno-62-56"></a> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
|
||||
<a id="__codelineno-62-57" name="__codelineno-62-57" href="#__codelineno-62-57"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
|
||||
<a id="__codelineno-62-58" name="__codelineno-62-58" href="#__codelineno-62-58"></a> <span class="c1"># 更新元素数量</span>
|
||||
<a id="__codelineno-62-59" name="__codelineno-62-59" href="#__codelineno-62-59"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span> <span class="o">-=</span> <span class="mi">1</span>
|
||||
<a id="__codelineno-62-60" name="__codelineno-62-60" href="#__codelineno-62-60"></a> <span class="c1"># 返回被删除元素</span>
|
||||
<a id="__codelineno-62-61" name="__codelineno-62-61" href="#__codelineno-62-61"></a> <span class="k">return</span> <span class="n">num</span>
|
||||
<a id="__codelineno-62-62" name="__codelineno-62-62" href="#__codelineno-62-62"></a>
|
||||
<a id="__codelineno-62-63" name="__codelineno-62-63" href="#__codelineno-62-63"></a> <span class="k">def</span> <span class="nf">extend_capacity</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-62-64" name="__codelineno-62-64" href="#__codelineno-62-64"></a><span class="w"> </span><span class="sd">"""列表扩容"""</span>
|
||||
<a id="__codelineno-62-65" name="__codelineno-62-65" href="#__codelineno-62-65"></a> <span class="c1"># 新建一个长度为 self.__size 的数组,并将原数组拷贝到新数组</span>
|
||||
<a id="__codelineno-62-66" name="__codelineno-62-66" href="#__codelineno-62-66"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span> <span class="o">+</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span><span class="p">()</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__extend_ratio</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<a id="__codelineno-62-67" name="__codelineno-62-67" href="#__codelineno-62-67"></a> <span class="c1"># 更新列表容量</span>
|
||||
<a id="__codelineno-62-68" name="__codelineno-62-68" href="#__codelineno-62-68"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__capacity</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">)</span>
|
||||
<a id="__codelineno-62-69" name="__codelineno-62-69" href="#__codelineno-62-69"></a>
|
||||
<a id="__codelineno-62-70" name="__codelineno-62-70" href="#__codelineno-62-70"></a> <span class="k">def</span> <span class="nf">to_array</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
|
||||
<a id="__codelineno-62-71" name="__codelineno-62-71" href="#__codelineno-62-71"></a><span class="w"> </span><span class="sd">"""返回有效长度的列表"""</span>
|
||||
<a id="__codelineno-62-72" name="__codelineno-62-72" href="#__codelineno-62-72"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__nums</span><span class="p">[:</span> <span class="bp">self</span><span class="o">.</span><span class="n">__size</span><span class="p">]</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
|
||||
Reference in New Issue
Block a user