1. 程式人生 > >python連載第十五篇~史上最全列表知識原始碼+答案

python連載第十五篇~史上最全列表知識原始碼+答案

#2017-12-19 19:34:41 December Tuesday the 51 week, the 353 day
#python連載第十五篇~list列表

#列表定義,訪問,索引,操作,切片
列表就是用中括號包圍、逗號隔開的任何東西(稱作元素element),沒有數量,長度限制:
用中括號[]加序號訪問列表元素的方法就是索引index,索引就是列表元素所在的位置,索引從0 而不是1 開始,第二個元素索引為1,第三個索引為2,依次類推

#python連載第十五篇~list列表
#訪問list中的元素
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
#這個列表中有6個元素,但是一般我們從0開始數,一直數到5。
#也就是list1[0]的元素內容就是數字1,list1[5]元素內容就是"最近如何,親?"
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
#可以用print函式直接輸出這個列表
print("該列表所有元素為:",list1)
#訪問第一個元素
print("列表第一個元素為:",list1[0])
#訪問第二個元素
print("列表第二個元素為:",list1[1])
#訪問第六個元素
print("列表第六個元素為:",list1[5])
#也可以用負數來調取列表中的元素。
#list1[-1]表示列表中的最後一個元素。
print("列表最後一個元素為:",list1[-1])
#list1[-5]表示倒數第5個元素
print("列表倒數第5個元素:",list1[-5])
#也可以用for迴圈輸出列表內容
#for迴圈最擅長和列表配合搞事情
for i in list1:
	print(i)



#for迴圈做的事情其實就是遍歷列表中的每一項,每次迴圈都把當前項賦值給一個變數(這裡是i)並輸出,直到列表結束

#python連載第十五篇~list列表
#修改,新增

#修改列表中的元素
#只需要直接給那個元素賦值就可以了:
#給第一個元素賦值為512
list1[0] = 512
#賦值之後的列表內容
print("現在list1變成了",list1)

#向list中新增元素
#append方法可以在列表最後面增加元素。
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
#python中append方法的使用技巧是在列表後面新增英語中的句號,然後新增append方法
list1.append('最近很好呢~')
print("向list列表中新增元素後:",list1)


#python連載第十五篇~list列表
各種刪除方法
#del()方法刪除list中的元素,被刪除的元素無法再被使用
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
#刪除第一個元素
del list1[0]
print("刪除列表中第一個元素後:",list1)
#pop()方法刪除list中的元素,被刪除的元素還可以被使用
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
poped_list = list1.pop()		#刪除列表最後一個元素
print("刪除最後一個元素後的列表:",list1) 
print("被刪除的元素:",poped_list)
#彈出(刪除)列表中的任意元素,只需在pop()中加入數字
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
poped_list = list1.pop(2)		#刪除列表最後一個元素
print("刪除第三個元素後的列表:",list1) 
print("被刪除的第三個元素:",poped_list)
#直接刪除列表中的元素
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
love = 'i love you'
list1.remove(love)
print("刪除指定元素後的列表:",list1)
#被刪除的元素還可以繼續使用
print("被刪除的元素:",love)








切片的含義就是從列表許多元素中取出你想要的部分,類似屠夫用刀從牛肉中隨意剁出一塊出來的感覺,具體的方法就是:
在中括號[]內提供一對合適數字,用:分割。冒號前的數表示切片的開始位置,冒號後的數字表示切片到哪裡結束。

注意,開始位置包含在切片中,而結束位置不包括。
列表中第一個元素位置是0,第二個元素位置是1,以此類推

#python連載第十五篇~list列表
#列表的切片讀取
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
#取出列表中的第3個,第四個,元素,不包含第五個元素
print("列表第3,4個元素是:",list1[2:4])

#如果不指定第一個數,切片就從列表第一個元素開始
print("列表第1,2,3,4個元素是:",list1[:4])
#如果不指定第二個數,就一直到最後一個元素結束
print("列表第3個元素以後的內容是:",list1[2:])
#不指定,則返回列表所有元素
print("列表所有元素是:",list1[:])
#同索引一樣,切片中的數字也可以使用負數。比如
print("列表第3個到倒數第二個元素:",list1[2:-2])
#遍歷切片
print("前三個元素為:")
for list1_1 in list1[:3]:
	print(list1_1)

#python連載第十五篇~list列表
列表排序 
#下面列表中的元素是我在德國留學時候的室友,朋友
list2 = ['johannes', 'romi', 'andre','martin']
#列表永久按照字母表順序排序,排序後不可撤銷
list2.sort()
print("正序列表內容:",list2)
#向sort()方法傳遞引數reverse=True可以讓列表內容按照字母反方向順序排序
list2.sort(reverse=True)
print("反序列表內容:",list2)
#還可以用sorted()方法對列表臨時排序
list2 = ['johannes', 'romi', 'andre','martin']
print("這是原始列表")
print("原始列表:",list2)
print("這是臨時排序列表")
print("臨時正序列表:",sorted(list2))
print("原始列表保持不變")
print("原始列表:",list2)
#倒著列印列表
list2 = ['johannes', 'romi', 'andre','martin']
list2.reverse()		#反轉方法
print("反轉列表:",list2)
#確定列表長度
list2 = ['johannes', 'romi', 'andre','martin']
print("列表list2元素個數為:")
print(len(list2))



#python連載第十五篇~list列表

列表中插入,複製

#使用方法insert()可在列表的任何位置新增新元素。
#只需要指定新元素的索引(位置)和值。在插入的位置右側元素自動右移一個位置
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
list1.insert(4, 'Schatz德語寶貝的意思')
print(list1)

#複製列表
list1 = ['漢語', '英語']
list2 = list1
list3 = list1[:]		#[:]代表列表所有內容
print("新名字:list2,舊列表:",list2)
print("新名字:list3,舊列表:",list3)


#python連載第十五篇~list列表
列表加法,乘法,巢狀
#列表可以做加法
list1 = [1, '2', "3", "abc", "i love you", "最近如何,親?"]
list2 = ['johannes', 'romi', 'andre','martin']
list3 = list1 + list2
print("加法列表結果:",list3)

#列表還可以做乘法
list2 = ['johannes', 'romi', 'andre','martin']
list4 = list2 * 2
print("乘法列表結果:",list4)

#列表巢狀,列表裡面的元素還是列表
list1 = [1, '2', ]
list2 = ['johannes', 'romi']
list5 = [list1, list2]
print("列表巢狀結果:",list5)


2017-12-23 15:14:10 December Saturday the 51 week, the 357 day

#python連載第十五篇~list列表
數字列表的玩法
#for迴圈做的事情其實就是遍歷一個列表中的每一項,
#每次迴圈都把當前項賦值給一個變數(這裡是i)並輸出,直到列表結束
#使用函式(函式和方法是一個意思,兩者等價)range()建立一列數字
for i in range(1, 5):
	print(i)
#建立數值列表
numbers = list(range(1,5))
print("列表巢狀結果:",numbers)
#指定步長求偶數,第一個2是起點,11是終點,最後一個2是數字的間隔,步長
even_numbers = list(range(2,11,2))
print("2到10之間的偶數:",even_numbers)
#平方運算,在Python中,兩個星號(**)表示乘方運算。
#列表包含前10個整數的平方
squares = []							#建立空列表
for value in range(1,11):				#for迴圈輸出1到10的數字
	square = value**2					#給每個數字做平方運算
	squares.append(square)				#把每個數字依次新增到空列表裡面
print("1到10的平方分別是:",squares)	#打印出最終的列表
numbers = list(range(1,5))
print("列表元素內容為",numbers)
#求數字列表最小值
min_numbers = min(numbers)
print("列表最小元素為:", min_numbers)
#求數字列表最大值
max_numbers = max(numbers)
print("列表最大元素為:",max_numbers)
#求數字列表元素之和
sum_numbers = sum(numbers)
print("列表數字元素之和為:",sum_numbers)



2017-12-23 15:13:58 December Saturday the 51 week, the 357 day

#python連載第十五篇~list列表
常見系統錯誤整理
#索引錯誤:列表索引元素號碼要在元素裡面,如果超出電腦會報錯
list2 = ['johannes', 'romi', 'andre','martin']
print(list2[4])
電腦報錯如下:
Traceback (most recent call last):			#不用看,沒啥意義
  File "D:\Sublime_work_D\TF\TF_test.py", line 2, in <module>		
    print(list2[4])						#錯誤程式碼所在位置行
IndexError: list index out of range 	#索引錯誤:超出列表索引範圍
[Finished in 1.0s]
#語法錯誤:
for i in range(1, 10)
	print(i)
  File "D:\Sublime_work_D\TF\TF_test.py", line 1
    for i in range(1, 10)			#指出錯誤在for迴圈的末尾,缺個分號
                        ^
SyntaxError: invalid syntax 		#語法錯誤:無效語法
[Finished in 0.8s]
#縮排錯誤舉例
#沒有縮排
for i in range(1, 10):
print(i)
執行後無法通過電腦檢測,電腦返回如下:
  File "D:\Sublime_work_D\TF\TF_test.py", line 2	#檔案在電腦中的位置
    print(i)										#錯誤所在位置
        ^
IndentationError: expected an indented block		#縮排錯誤期望一個縮排模組
[Finished in 1.8s with exit code 1]
#不必要的縮排
list2 = ['johannes', 'romi', 'andre','martin']
	print(list2[4])
  File "D:\Sublime_work_D\TF\TF_test.py", line 3
    print(list2[4])
    ^
IndentationError: unexpected indent   	#縮排錯誤:超出預期的縮排,沒必要縮排
[Finished in 0.8s]


建議大家積累常見錯誤,然後定期複習,避免重複犯錯,對英語有壓力的同學可以記住錯誤中的常見詞,以後碰到新錯誤就能看懂電腦報錯原因。把這個錯誤放進檔案:python_problems.py 
這句話是關鍵:IndexError: list index out of range,說明了錯誤原因是索引錯誤:IndexError


最後關於列表還有大量操作,這裡只是拋磚引玉,以後碰到了新用法,自己臨時學習就行,做程式設計,最重要的品質就是學習能力和終生學習的意識。
一旦放棄學習,很快就被時代拋棄


家庭作業:
用range方法和for迴圈實現1到10的平方

squares = [value**2 for value in range(1,11)]
print(squares)

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[Finished in 1.7s]