課時10:列表:一個打了激素的陣列1

那是個好男孩發表於2018-07-28

目錄:
  一、建立列表

  二、向列表新增元素

  三、課時10課後習題及答案

 

***************

一、建立列表

***************

建立列表跟建立普通變數一樣,用中括號括起一堆資料就可以了,資料之間用逗號隔開。

>>> number = [1,2,3,4,5]
>>> number
[1, 2, 3, 4, 5]
>>> len(number)
5

可以建立一個魚龍混雜的列表:

>>> mix = [1,"小甲魚",3.14,[1,2,3]]
>>> mix
[1, '小甲魚', 3.14, [1, 2, 3]]

可以建立一個空列表:

>>> empty = []
>>> empty
[]

 

***********************

二、向列表新增元素

***********************

append()   extend()   insert()

要向列表中新增元素,可以使用append()方法:(注:append()不是一個BIF,它屬於列表物件的一個方法)

>>> number = [1,2,3,4,5]
>>> number.append(6)
>>> number
[1, 2, 3, 4, 5, 6]

我們把數字7和8新增進去,但是發現並不能用append()同時新增多個元素:這時候我們可以使用extend()方法向列表末尾新增多個元素:

>>> number.append(7,8)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    number.append(7,8)
TypeError: append() takes exactly one argument (2 given)
>>> number.extend(7,8)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    number.extend(7,8)
TypeError: extend() takes exactly one argument (2 given)

怎麼都報錯了呢?!extend()方法事實上使用一個列表來擴充套件另一個列表,所以它的引數應該是一個列表:

>>> number.extend([7,8])
>>> number
[1, 2, 3, 4, 5, 6, 7, 8]

如果想要往列表的任意位置插入元素,就要使用insert()方法。insert()方法有兩個引數:第一個引數代表在列表中的位置,第二個引數是在這個位置處插入一個元素。不妨來試一下,讓數字0出現在列表number的最前邊:(注:列表的第一位索引值是0)

>>> number.insert(0,0)
>>> number
[0, 1, 2, 3, 4, 5, 6, 7, 8]

 

*******************************

三、課時10課後習題及答案

*******************************

測試題:
  
0. 列表都可以存放一些什麼東西?
1. 向列表增加元素有哪些方法?
2. append() 方法和 extend() 方法都是向列表的末尾增加元素,請問他們有什麼區別?
3. member.append(['竹林小溪', 'Crazy迷戀']) 和 member.extend(['竹林小溪', 'Crazy迷戀']) 實現的效果一樣嗎?
4. 有列表 name = ['F', 'i', 'h', 'C'],如果小甲魚想要在元素 'i' 和 'h' 之間插入元素 's',應該使用什麼方法來插入?

 

動動手:
 
0. 自己動手試試看,並分析在這種情況下,向列表新增資料應當採用哪種方法比較好?
假設給定以下列表:
member = ['小甲魚', '黑夜', '迷途', '怡靜', '秋舞斜陽']
要求將列表修改為:
member = ['小甲魚', 88, '黑夜', 90, '迷途', 85, '怡靜', 90, '秋舞斜陽', 88]
方法一:使用 insert() 和 append() 方法修改列表。
方法二:重新建立一個同名字的列表覆蓋。

1. 利用 for 迴圈列印上邊 member 列表中的每個內容,如圖:

小甲魚
88
黑夜
90
迷途
85
怡靜
90
秋舞斜陽
88

 

2. 上一題列印的樣式不是很好,能不能修改一下程式碼列印成下圖的樣式呢?【請至少使用兩種方法實現】

小甲魚 88
黑夜 90
迷途 85
怡靜 90
秋舞斜陽 88

 

答案:

測試題答案:
 
0. 列表都可以存放一些什麼東西?
我們說 Python 的列表是一個打了激素的陣列,如果把陣列比喻成集裝箱,那麼 Python 的列表就是一個大倉庫,Ta 可以存放我們已經學習過的任何資料型別。
 
1. 向列表增加元素有哪些方法? 
這節課我們教過大家三種方法想列表增加元素,分別是:append()、extend() 和 insert()。
 
2. append() 方法和 extend() 方法都是向列表的末尾增加元素,請問他們有什麼區別?
append() 方法是將引數作為一個元素增加到列表的末尾。
extend() 方法則是將引數作為一個列表去擴充套件列表的末尾。
>>> name = ['F', 'i', 's', 'h']
>>> name.append('C')
>>> name
['F', 'i', 's', 'h', 'C']
>>> name.extend(['.', 'c'])
>>> name
['F', 'i', 's', 'h', 'C', '.', 'c']
>>> name.append(['o', 'm'])
>>> name
['F', 'i', 's', 'h', 'C', '.', 'c', ['o', 'm']]

 

3. member.append(['竹林小溪', 'Crazy迷戀']) 和 member.extend(['竹林小溪', 'Crazy迷戀']) 實現的效果一樣嗎?
不一樣,因為怕大家沒有仔細看上一題的示例,所以不懂的請看上一題解釋。
>>> member = [1,2,3]
>>> member.append(['竹林小溪', 'Crazy迷戀'])
>>> member
[1, 2, 3, ['竹林小溪', 'Crazy迷戀']]
>>> member = [1,2,3]
>>> member.extend(['竹林小溪', 'Crazy迷戀'])
>>> member
[1, 2, 3, '竹林小溪', 'Crazy迷戀']

 

4. 有列表 name = ['F', 'i', 'h', 'C'],如果小甲魚想要在元素 'i' 和 'h' 之間插入元素 's',應該使用什麼方法來插入?
name.insert(2, 's')
 
動動手答案:
 
0. 自己動手試試看,並分析在這種情況下,向列表新增資料應當採用哪種方法比較好?
假設給定以下列表:
member = ['小甲魚', '黑夜', '迷途', '怡靜', '秋舞斜陽']
要求將列表修改為:
member = ['小甲魚', 88, '黑夜', 90, '迷途', 85, '怡靜', 90, '秋舞斜陽', 88]
方法一:使用 insert() 和 append() 方法修改列表。
方法二:重新建立一個同名字的列表覆蓋。
解答:
方法一:
member.insert(1, 88)
member.insert(3, 90)
member.insert(5, 85)
member.insert(7, 90)
member.append(88) #或者寫成 member.insert(9,88)也可以

方法二:

member = ['小甲魚', 88, '黑夜', 90, '迷途', 85, '怡靜', 90, '秋舞斜陽', 88]

對於這種情況,明顯是第二種方法看起來要好一些嘛。
不過對於大型的列表,第一種方法可能更合適,所以我們說永遠沒有最好的,只有最合適的。

 

1. 利用 for 迴圈列印上邊 member 列表中的每個內容

member = ['小甲魚', 88, '黑夜', 90, '迷途', 85, '怡靜', 90, '秋舞斜陽', 88]
for each in member:
    print(each)
>>> member = ['小甲魚', 88, '黑夜', 90, '迷途', 85, '怡靜', 90, '秋舞斜陽', 88]
>>> for each in member:
        print(each)

        
小甲魚
88
黑夜
90
迷途
85
怡靜
90
秋舞斜陽
88

 

2. 上一題列印的樣式不是很好,能不能修改一下程式碼列印成下圖的樣式呢?【請至少使用兩種方法實現】

方法一:
count = 0
length = len(member)
while count < length:
    print(member[count], member[count+1])
    count += 2

方法二:    
    
for each in range(len(member)):
    if each%2 == 0:
        print(member[each], member[each+1])


小甲魚 88
黑夜 90
迷途 85
怡靜 90
秋舞斜陽 88

 我們來分析下:題目要求是要將每個名字跟對應的成績列印在同一行。我們來看看,第一列全是名字,索引值依此是0,2,4,6,8,同理第二列的成績全是奇數,索引值依此是1,3,5,7,9.不由得讓人想到了判斷奇偶數的%,另外,要呈現print(number[x],number[x+1])的結果,裡面的第一個索引值可以依賴for迴圈的range()內建函式,加上奇偶的判斷實現。 方法一是通過while迴圈,每次迴圈加2。同樣的原理。

member = ['小甲魚', 88, '黑夜', 90, '迷途', 85, '怡靜', 90, '秋舞斜陽', 88]
print(len(member))
print(member[10])
for i in range(0,len(member), 2):
    print(member[i],member[i+1])

  

 

值得注意的一點是這裡 range()內建函式的 each的值不會受到 迴圈體內 range變數變化的影響。

 

 

 

 

相關文章