<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 6.2.2 列表 我們先回顧第 2 章中介紹的關于列表的知識。 列表是由多個數據組成的序列,可以通過索引(位置序號)來訪問列表中的數據。與很 多編程語言提供的數組(array)類型不同,Python 列表具有兩個特點:第一,列表成員可 以由任意類型的數據構成,不要求各成員具有相同類型;第二,列表長度是不定的,隨時可 以增加和刪除成員。另外,與 Python 字符串類型不同,Python 列表是可以修改的,修改方 式包括向列表添加成員、從列表刪除成員以及對列表的某個成員進行修改。 作為序列的一種,我們可以對列表施加序列的基本操作,如索引、合并和復制等(參見 表 6.1)。另外由于列表是可以修改的,Python 還為列表提供了修改操作,見表 6.3。 | 修改方式 | 含義 | | --- | --- | | a[i] = x | 將列表 a 中索引為 i 的成員改為 x | | a[i:j] = b | 將列表 a 中索引從 i 到 j(不含)的片段改為列表 b | | del a[i] | 將列表 a 中索引為 i 的成員刪除 | | del a[i:j] | 將列表 a 中索引從 i 到 j(不含)的片段刪除 | 表 6.3 列表的修改 本節要引入的是面向對象方式的列表操作。和字符串一樣,Python 列表實際上也是對 象,提供了很多有用的方法。例如,append()方法用于向列表尾部添加成員數據: ``` >>> a = ['hi'] >>> a.append('there') >>> a ['hi', 'there'] ``` 利用 append()方法,我們可以將用戶輸入的一批數據存儲到一個列表中: ``` data = [] x = raw_input('Enter a number: ') while x != "": data.append(eval(x)) x = raw_input("Enter a number: ") ``` 這段代碼實際上是累積算法,其中的列表 data 就是累積器:首先初始化為空列表,然后通 過循環來逐步累積(添加成員數據)。 表 6.4 列出了列表對象的常用方法。 | 方法 | 含義 | | --- | --- | | &lt;列表&gt;.append(x) | 將 x 添加到&lt;列表&gt;的尾部 | | &lt;列表&gt;.sort() | 對&lt;列表&gt;排序(使用缺省比較函數 cmp) | | &lt;列表&gt;.sort(mycmp) | 對&lt;列表&gt;排序(使用自定義比較函數 mycmp) | | &lt;列表&gt;.reverse() | 將&lt;列表&gt;次序顛倒 | | &lt;列表&gt;.index(x) | 返回 x 在&lt;列表&gt;中第一次出現處的索引 | | &lt;列表&gt;.insert(i,x) | 在&lt;列表&gt;中索引 i 處插入成員 x | | &lt;列表&gt;.count(x) | 返回&lt;列表&gt;中 x 的出現次數 | | &lt;列表&gt;.remove(x) | 刪除&lt;列表&gt;中 x 的第一次出現 | | &lt;列表&gt;.pop() | 刪除&lt;列表&gt;中最后一個成員并返回該成員 | | &lt;列表&gt;.pop(i) | 刪除&lt;列表&gt;中第 i 個成員并返回該成員 | 表 6.4 列表對象的方法 下面通過例子來說明對列表對象的處理: ``` >>> a = ['Irrational',[3.14,2.718],'pi and e'] >>> a.sort() >>> a [[3.14, 2.718], 'Irrational', 'pi and e'] >>> a[0].reverse() >>> a [[2.718, 3.14], 'Irrational', 'pi and e'] >>> a.insert(2,'number') >>> a [[2.718, 3.14], 'Irrational', 'number', 'pi and e'] >>> print a.pop(0) [2.718, 3.14] >>> a ['Irrational', 'number', 'pi and e'] ``` 編程案例:一個統計程序 對大量數據進行統計、分析是實際應用中常見的問題,通過計算一些統計指標可以獲得有關這批數據的多側面的特征。常用的統計指標包括總和、算術平均值、中位數、眾數、標 準差和方差等,這些指標的計算過程具有不同的特性。 “總和”是可以累積計算的,即可以先計算部分數據的和 sum,當有了新數據再加入 sum 并形成新的 sum。重復上述步驟直至所有數據都已加入 sum,這時所得即總和。利用我 們介紹過的累積算法模式,很容易實現求總和的代碼: ``` sum = 0 data = raw_input("輸入新數據: ") while data != "": x = eval(data) sum = sum + x ``` 從以上代碼可以看到,雖然用戶輸入了很多數據,但程序中卻始終只用一個簡單變量data 來存儲輸入的數據。為什么不怕后面輸入的數據將前面輸入的數據覆蓋掉呢?巧妙之處 在于,累積算法每次接收一個輸入數據就立即使用該數據(將新數據加到累加變量 sum 中), 從而使變量 data 可以用于存儲下一個輸入數據。我們沒有采用“先將所有輸入數據存儲起 來,然后再求和”的處理策略,因為這個策略需要大量存儲空間,更麻煩的是我們預先并不 知道需要多少存儲空間。類似地,輸入數據的“個數”也可以利用累積算法來求得。 再看“算術平均值”指標,雖然它本身不能直接累積計算,但根據公式“平均值=總和÷數據個數”可見,可以通過累積算法求得“總和”和“數據個數”,然后直接算出平均值。 推而廣之,如果某個統計指標可以表示成某些累積類型指標的代數式,那么這個指標就可以 利用累積算法進行計算,無需保存所有輸入數據。 再看一個統計指標——中位數(median)。中位數將全體數據劃分為小于和大于它的兩 部分,并且兩部分的數據個數相等。如果全體數據從小到大有序排列,則處于中間位置的那 個數據就是中位數①。例如,數據集合{3,4,22,50,64}的中位數是 22。中位數的計算與總和、 算術平均值都不同,因為它不能通過累積來計算,如{3,4}的中位數與{3,4,22}的中位數直至{3,4,22,50,64}的中位數基本沒什么關系。因此,為了對用戶輸入的一組數據求中位數,必須 將每個數據先保存起來,等全體數據都到位后才能計算。與中位數類似的、不具有累積計算 性質的統計指標還有眾數、標準差等,可以稱之為“整體型”指標,即它們都需要針對全體 數據進行計算。那么,如何存儲所有輸入數據呢?顯然,定義許多獨立變量來存儲輸入數據 是不合適的,因為我們不知道用戶會輸入多少個數據;即使知道用戶將輸入 n 個數據,定義 n 個獨立變量來存儲這些數據也是非常笨拙的做法。其實問題很容易解決,列表可以將所有 輸入數據組合成單個數據,這樣既保存了所有數據,又不需要定義許多獨立變量。 下面我們來編寫一個統計程序,其功能是獲得用戶輸入的數值數據,并求出這批數據的 總和、算術平均值和中位數。如前所述,這三個指標分別代表三種類型的統計指標,因此我 們的統計程序雖然簡單,但具有一般的意義。 按照模塊化設計思想,我們分別為數據輸入及每個指標的計算設計一個函數。 首先設計獲得輸入數據的函數。由于整體型指標中位數的計算需要用到全體輸入數據,因此我們先將所有輸入數據存儲到一個列表中。獲得用戶輸入的關鍵代碼是一個哨兵循環, 數據列表是一個累積器,在循環中逐個接收數據。代碼如下: > ① 若數據個數為偶數,則取處于中間位置的兩個數據的平均值。 ``` def getInput(): data = [] x = raw_input("Enter a number (&lt;Enter&gt; to quit): ") while x != "": data.append(eval(x)) x = raw_input("Enter a number (&lt;Enter&gt; to quit): ") return data ``` 接著設計三個統計指標的函數。這些函數的參數都是列表 aList,調用時將存儲輸入數 據的 data 作為實參傳遞給 aList 即可。總和及算術平均值很容易計算,只要先對輸入列表利 用累積求得總和,然后再除以列表長度即得平均值。列表長度可以用 len()直接求得,不需 要另外寫一個累積循環。代碼如下: ``` def sum(aList): s = 0.0 for x in aList: s = s + x return s def mean(aList): return sum(aList) / len(aList) ``` 中位數的計算沒有代數公式可用,我們先將全體數據從小到大排序,然后取中間位置的 數據值。當數據個數為奇數時,有唯一的中間位置,故中位數很容易找到;當數據個數為偶 數時,中位數是處于中間位置的兩個數據的平均值。列表數據的排序可以利用現成的列表對 象方法 sort()實現,而奇偶性可以利用余數運算的結果來判斷。代碼如下: ``` def median(aList): aList.sort() size = len(aList) mid = size / 2 if size % 2 == 1: m = aList[mid] else: m = (aList[mid] + aList[mid-1]) / 2.0 return m ``` 利用以上四個模塊,再加上主控模塊 main(),就完成了我們的統計程序。完整代碼見程 序 6.1。 【程序 6.1】statistics.py ``` def getInputs(): d = [] x = raw_input("Enter a number (&lt;Enter&gt; to quit): ") while x != "": d.append(eval(x)) x = raw_input("Enter a number (&lt;Enter&gt; to quit): ") return d def sum(aList): s = 0.0 for x in aList: s = s + x return s def mean(aList): return sum(aList) / len(aList) def median(aList): aList.sort() size = len(aList) mid = size / 2 if size % 2 == 1: m = aList[mid] else: m = (aList[mid] + aList[mid-1]) / 2.0 return m def main(): print "This program computes sum, mean and median." data = getInputs() sigma = sum(data) xbar = mean(data) med = median(data) print "Sum:", sigma print "Average:", xbar print "Median:", med main() ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看