第4章節(Lists)所做的練習
這章主要講列表(List)與元組(Tuple)
列表的表示方式是方括號[]
元組用圓括號表示()
>>> ['aaa', 1, 'bb', 22, 'ccc'] ['aaa', 1, 'bb', 22, 'ccc'] >>> >>> type(['aaa', 1, 'bb', 22, 'ccc'])>>> >>> ('aaa', 1, 'bb', 22, 'ccc') ('aaa', 1, 'bb', 22, 'ccc') >>> >>> type(('aaa', 1, 'bb', 22, 'ccc')) 
可用下標來取得列表或元組中某個值, 或改變某個值(但元組不行改值).
>>> spam = ['aaa', 1, 'bb', 22, 'ccc']
>>> spam[2]
'bb'
>>> 
>>> spam = ['aaa', 1, 'bb', 22, 'ccc']
>>> spam[2] = 'BB'
>>> spam
['aaa', 1, 'BB', 22, 'ccc']
>>> 
>>> spam = ('aaa', 1, 'bb', 22, 'ccc')
>>> spam[2]
'bb'
>>> 
>>> spam = ('aaa', 1, 'bb', 22, 'ccc')
>>> spam[2] = 'BB'
Traceback (most recent call last):
  File "", line 1, in 
    spam[2] = 'BB'
TypeError: 'tuple' object does not support item assignment
>>>   
可用切片來取得列表中多個值
>>> spam = ['aaa', 1, 'bb', 22, 'ccc'] >>> spam [2:-1] ['bb', 22]
可以用len來取得列表或元組的長度
>>> spam = ['aaa', 1, 'bb', 22, 'ccc']
>>> len(spam)
5
>>> 
>>> spam = ('aaa', 1, 'bb', 22, 'ccc')
>>> len(spam)
5
可用+ & *號來合併或複製列表或元組
>>> spam0 = ['aaa','bbb']
>>> spam1 = [111, 222]
>>> spam0 + spam1
['aaa', 'bbb', 111, 222]
>>> 
>>> spam0 * 3
['aaa', 'bbb', 'aaa', 'bbb', 'aaa', 'bbb']
>>> 
>>> [111, 222] * 2
[111, 222, 111, 222]
>>> 
>>> spam0 = ('aaa','bbb')
>>> spam1 = (111, 222)
>>> spam0 + spam1
('aaa', 'bbb', 111, 222)
>>> 
>>> spam0 * 3
('aaa', 'bbb', 'aaa', 'bbb', 'aaa', 'bbb')
>>> 
>>> (111, 222) * 3
(111, 222, 111, 222, 111, 222)
可用del & remove來刪除列表中的值, 但元組都不行
>>> spam = ['aaa', 1, 'bb', 22, 'ccc']
>>> del spam[0]
>>> spam
[1, 'bb', 22, 'ccc']
>>> 
>>> spam = ['aaa', 1, 'bb', 22, 'ccc']
>>> spam.remove('bb')
>>> spam
['aaa', 1, 22, 'ccc']
>>> 
>>> spam = ('aaa', 1, 'bb', 22, 'ccc')
>>> del spam[0]
Traceback (most recent call last):
  File "", line 1, in 
    del spam[0]
TypeError: 'tuple' object doesn't support item deletion
>>> 
>>> spam = ('aaa', 1, 'bb', 22, 'ccc')
>>> spam.remove('bb')
Traceback (most recent call last):
  File "", line 1, in 
    spam.remove('bb')
AttributeError: 'tuple' object has no attribute 'remove'
>>>     
列表與循環的組合
>>> spam = ['aaa', 'bbb', 'ccc']
>>> for i in range(len(spam)):
    print('Inedx ' + str(i) + ' is: ' + spam[i])
   
Inedx 0 is: aaa
Inedx 1 is: bbb
Inedx 2 is: ccc
>>> 
可用index()來查列表或元組中某個值
>>> spam = ['aaa', 1, 'bb', 22, 'ccc']
>>> spam.index('bb')
2
>>> 
>>> spam = ('aaa', 1, 'bb', 22, 'ccc')
>>> spam.index(22)
3
可用append()和insert()來填加或插入列表, 但元組不行
>>> spam = ['aaa', 1, 'bb', 22, 'ccc']
>>> spam.append(333)
>>> spam
['aaa', 1, 'bb', 22, 'ccc', 333]
>>> 
>>> spam = ['aaa', 1, 'bb', 22, 'ccc']
>>> spam.insert(2, 'BBB')
>>> spam
['aaa', 1, 'BBB', 'bb', 22, 'ccc']
>>> 
>>> spam = ('aaa', 1, 'bb', 22, 'ccc')
>>> spam.append(333)
Traceback (most recent call last):
  File "", line 1, in 
    spam.append(333)
AttributeError: 'tuple' object has no attribute 'append'
>>> 
>>> spam = ('aaa', 1, 'bb', 22, 'ccc')
>>> spam.insert(2, 'BBB')
Traceback (most recent call last):
  File "", line 1, in 
    spam.insert(2, 'BBB')
AttributeError: 'tuple' object has no attribute 'insert'
>>>     
用sort照ASCII字符順序排列(先大寫英文, 後小寫英文), 但元組不行
用sort(key=srt.lower)來先小寫後大寫
>>> spam = ['aaa', 'BB', 'cCc', 'CcC']
>>> spam.sort()
>>> spam
['BB', 'CcC', 'aaa', 'cCc']
>>> 
>>> spam = ['aaa', 'BB', 'cCc', 'CcC']
>>> spam.sort(key=str.lower)
>>> spam
['aaa', 'BB', 'cCc', 'CcC']
>>> 
>>> spam = ('aaa', 'BB', 'cCc', 'CcC')
>>> spam.sort()
Traceback (most recent call last):
  File "", line 1, in 
    spam.sort()
AttributeError: 'tuple' object has no attribute 'sort'
>>>   
用list()跟tuple()來做互換類型
>>> spam0 = ('aaa','bbb')
>>> type(spam0)
>>> type(list(spam0))
>>> 
>>> spam1 = [111, 222]
>>> type(spam0)
>>> type(tuple(spam0))
   
如果要講兩個變量指向兩個不同的列表,
用copy(淺層拷貝)或deepcopy(深層拷貝)
>>> import copy >>> spam0 = ['aaa','bbb'] >>> spam1 = copy.copy(spam0) >>> spam1[0] = 'BBB' >>> spam0 ['aaa', 'bbb'] >>> spam1 ['BBB', 'bbb'] >>> >>> import copy >>> spam0 = [['aaa','bbb'],['ccc','ddd']] >>> spam1 = copy.deepcopy(spam0) >>> spam1[1][0] = 'CCC' >>> spam0 [['aaa', 'bbb'], ['ccc', 'ddd']] >>> spam1 [['aaa', 'bbb'], ['CCC', 'ddd']]
章節4習題, 用Notepad++打下列的程式碼,
另存為Chapter_4.py. 我附上中文注釋方便好讀.
# -*- coding: UTF-8 -*- # http://juilin77.blogspot.com/ # v20181216 # Automate The Boring Stuff With Python - Chapter 4 # 一個橫心的列表, 每個列表有6(0-5)個元素, 長度為9(0-8)(由上到下共9層列表) grid = [['.', '.', '.', '.', '.', '.'], ['.', '0', '0', '.', '.', '.'], ['0', '0', '0', '0', '.', '.'], ['0', '0', '0', '0', '0', '.'], ['.', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '.'], ['0', '0', '0', '0', '.', '.'], ['.', '0', '0', '.', '.', '.'], ['.', '.', '.', '.', '.', '.']] # 定義第1層 NewHeart = '' # 取出每層列表的第1個元素, 並轉為字符 for i in range(len(grid)): NewHeart += str(grid[i][0]) # 定義第2層 NewHeart1 = '' # 取出每層列表的第2個元素, 並轉為字符 for i in range(len(grid)): NewHeart1 += str(grid[i][1]) # 定義第3層 NewHeart2 = '' # 取出每層列表的第3個元素, 並轉為字符 for i in range(len(grid)): NewHeart2 += str(grid[i][2]) # 定義第4層 NewHeart3 = '' # 取出第i層列表的第4個值, 並轉為字符 for i in range(len(grid)): NewHeart3 += str(grid[i][3]) # 定義第5層 NewHeart4 = '' # 取出每層列表的第5個元素, 並轉為字符 for i in range(len(grid)): NewHeart4 += str(grid[i][4]) # 定義第6層 NewHeart5 = '' # 取出每層列表的第6個元素, 並轉為字符 for i in range(len(grid)): NewHeart5 += str(grid[i][5]) # 印出每一層分行印 print(NewHeart + '\n' + NewHeart1 + '\n' + NewHeart2 + '\n' + NewHeart3 + '\n' + NewHeart4 + '\n' + NewHeart5)
然後用Windows的cmd, 執行python.
D:\Tech\Python\Automate The Boring Stuff With Python>python Chapter_4.py ..00.00.. .0000000. .0000000. ..00000.. ...000... ....0.... D:\Tech\Python\Automate The Boring Stuff With Python>
完成
Reference:
Automate the Boring Stuff with Python
Python編程快速上手--讓繁瑣工作自動化
ISBN-10: B01N6B9BSA
https://www.amazon.com/Python%E7%BC%96%E7%A8%8B%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B-%E8%AE%A9%E7%B9%81%E7%90%90%E5%B7%A5%E4%BD%9C%E8%87%AA%E5%8A%A8%E5%8C%96-%E7%BE%8E-Al-Sweigart%EF%BC%88%E6%96%AF%E7%BB%B4%E5%8A%A0%E7%89%B9%EF%BC%89/dp/B01I0XN8XY/ref=sr_1_1?ie=UTF8&qid=1543814481&sr=8-1&keywords=9787115422699
官網:
https://automatetheboringstuff.com/
最初發表 / 最後更新: 2018.12.16 / 2018.12.16

 
 
 
0 comments:
張貼留言