python學習筆記:python基礎語法與列表list
1、while迴圈和for迴圈
while 真值表達式1:
語句塊1
else:
語句塊2
執行流程:先判斷真值表達式,True進語句塊1,完了之後繼續判斷真值表達式1
直到真值表達式為False,執行一遍else裡的內容,結束while語句
注意迴圈變數的自增和自減即可
2、break語句
終止上一層迴圈
3、for語句用於遍歷序列或者迭代物件的每一個元素
可迭代物件:指能夠依次獲取資料的物件,包括字串str、列表list、元組tuple、字典dict、集合set、range等
語法格式:
for 變數列表 in 可迭代物件:
語句塊1
else:
語句塊2
解釋:可迭代物件的每一個元素物件依次賦給列表中的變數,賦值完畢後執行語句塊1
所有元素都賦值過後,執行else;如果使用了break跳出迴圈,else語句不會繼續執行
4、range函式
for i in range(5): i是從0到4(包含4)
for i in range(5,9): i是從5到8(包含8)
for i in range(1,9,2): i的增量是2,所以i的值為:1 3 5 7
for i in range(9,1,-2): i的值依次為9,7,5,3
5、一個很好的練習題:
用for迴圈生成一個字串"ABCD...XYZ",並列印。
程式碼:
i = str()
for c in range(ord('A'),ord('Z')+1):
i += str(chr(c))
print("%s"%i)
6、練習題:輸入Unicode的begin值和end值,按表格形式列印這個區間內的Unicode的十進位制、十六進位制、對應字元
str1 = input("please input Unicode1: ")
str2 = input("please input Unicode2: ")
begin = int(str1)
end = int(str2)
print("%s"%"10jinzhi".center(15),end = '|')
print("%s"%"16jinzhi".center(15),end = '|')
print("%s"%"char".center(15),end = '|\n')
for i in range(begin,end+1):
print("%s"%str(i).center(15),end = '|')
print("%s"%hex(i).center(15),end = '|')
print("%s"%str(chr(i)).center(15),end = '|\n')
執行結果:
please input Unicode1: 45
please input Unicode2: 53
10jinzhi | 16jinzhi | char |
45 | 0x2d | - |
46 | 0x2e | . |
47 | 0x2f | / |
48 | 0x30 | 0 |
49 | 0x31 | 1 |
50 | 0x32 | 2 |
51 | 0x33 | 3 |
52 | 0x34 | 4 |
53 | 0x35 | 5 |
7、continue語句
和c語言一樣
8、列表list
一個長度可變的容器,其資料型別可以不一致
比如[1,3,4,[23,424],"qweqwe",1+2j]
宣告一個列表 l = [10,2,3]
建構函式list():
list() 返回空列表
list(interable,即可迭代物件,如str,range) 用所給interable產生一個list
比如:list(range(10,1,-2)) = [10, 8, 6, 4, 2]
list("list("abcdefg")) = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
9、列表的運算
+:兩個list合併
+=:兩個list合併
*:相當於多個加法,只能乘int,不能乘list;乘以負數,得到空列表
*=:同上
規則和字串一樣
10、列表的比較
< <= > >= == !=
比較規則:從前向後比較每一個元素,完全相同則相等
如果一個列表比另一個長,那麼短的那個列表比較時,空缺的部分值為-∞
["abc",1,2] > ["123",1,2]因為字串"abc">"123"
但是["abc",1]>[1,2]執行時會出錯,因為無法比較
11、list的in和not in運算子
判斷元素是否在list中
例子:'a' in ['a',1,2,3] = True
然而:'a' in [1,2,['a','b']] = False
12、list列表的索引與切片
和字串一樣
索引和c的陣列完全一樣
切片的結果還是列表list
列表的切片是可以賦值的:l[1:3] = [1,2],此時還是可以倒著賦值
切出一個長度為0的“縫”,還可以給某個位置插入一些資料
13、del刪除列表元素
del L[-1]刪除編號為-1即最後一個元素
del L[0]刪除編號為0的元素,即第一個元素
del L[::2]刪除切片出來的元素,這個語句將刪除L中0,2,4,6...這些元素
14、list列表相關的函式
len(L)
max(L)
min(L)
sum(L) 列表元素求和,必須是數值型列表
any(L) 列表中有一個元素bool值為真則返回真
all(L) 列表中所有元素都為真則為真
15、list列表常用方法(method)
L.index(x[,begin[,end]]) 找到第一個值為x的列表元素返回下標
begin為開始,end為結束,預設為list開頭和結尾,找不到產生錯誤
L.insert(index,obj) 在index下標處插入obj,之後元素後移,負下標依然起作用
L.count(x) 數列表中元素x的個數
L.remove(x) 刪除列表中第一次出現該值的元素
L.append() 向列表追加一個元素
L.extend(List) 向列表插入另一個列表,和+=不同的是,該操作不會進行記憶體複製,只是在L基礎上追加
注意:L.extend([1,2,3])會將1,2,3分別作為一個單獨元素加入到L後面,但是append([1,2,3])將[1,2,3]作為一個元素加入L之後
L.clear() 清空列表,即L=[]
對列表的賦值操作是引用賦值,兩個變數關聯的還是同一個記憶體區域,用L.copy()做一個拷貝
L.sort(reverse = Flase) 排序,預設順序從小到大
L.reverse() 列表反轉,和切片不同的是,不用記憶體複製
L.pop([index]) 刪除index下標處對應的元素,預設刪除最後一個,返回被pop物件的引用
16、深拷貝和淺拷貝
淺拷貝指在拷貝時只拷貝物件的引用關係,不拷貝關聯的物件
深拷貝指連同關聯的物件一起拷貝,用
import copy
copy.deepcopy(L1)進行深拷貝
17、列表和字串比較
列表和字串都是可迭代物件、有序序列
列表元素可以是任意元素,字串元素只能是字元
字串相對來說的不可變物件,而序列則是可變物件
18、字串文字解析方法split()和join()
str.split(sep=None,maxsplit=-1) 將字串以sep為界限分割成若干字串,以列表形式返回。如果未給定sep,則以空白符為界限
str.join(iterable) 舉個例子:L=['aa','a','3'] "##".join(L) = 'aa##a##3'
舉例一個應用:
path = ['C:','usr','WilliamCode']
"\\".join(path) = 'C\\usr\\WilliamCode' #其中\\是轉義字元,用於生成路徑