python語法確實簡潔, 其資料結構更有獨特之處。
附原始程式碼:
# 1 list清單=================================================
# list是一種有序的集合,可以隨時訪問、添加和刪除其中的元素
#
僅從操作方式上看,清單像是陣列和鏈表的綜合體。
# 除按索引訪問外,還支援插入、添加、刪除等操作,完全可當作佇列和棧使用。
# 如不考慮性能問題,清單似乎是一種易使用且功能完善的理想資料結構。
# 創建list
classmate = ['Mike','Bob','Tracy']
print(classmate)
#(#……代表print輸出)
#……['Mike', 'Bob', 'Tracy']
# 由於python是動態語言,所以list中包含的元素並不要求都必須是同一種資料類型
L = ['Mike',100,True]
print(L)
#……['Mike', 100, True]
# 按照索引訪問list
print(classmate[0])
#……Mike
# list還可以倒序訪問
print(classmate[-1])
#……Tracy
# 添加新元素
classmate.append('wwu')
print(classmate)
#……['Mike', 'Bob', 'Tracy', 'wwu']
# 插入新元素
classmate.insert(0,'zwu')
print(classmate)
#……['zwu', 'Mike', 'Bob', 'Tracy', 'wwu']
# 從list未尾刪除元素
classmate.pop()
print(classmate)
#……['zwu', 'Mike', 'Bob', 'Tracy']
# 從list指定位置刪除元素
classmate.pop(2)
print(classmate)
#……['zwu', 'Mike', 'Tracy']
#list中替換元素
classmate[1] = 'Lisa'
print(classmate)
#……['zwu', 'Lisa', 'Tracy']
#把一個list拼接成一個字串
print(' '.join(classmate))
#……zwu Lisa Tracy
#對list進行slice切片操作
# 也就是取list的部分資料,[start,end]
li = [0,1,2,3,4,5,6]
print(li[0:4])
#……[0, 1, 2, 3]
# li[0:4]可以簡寫成li[:4]
print(li[4:6])
#……[4, 5]
print(li[:])
#……[0, 1, 2, 3, 4, 5, 6]
# 切片操作還可以指定第三個參數
print(li[::2])
#……[0, 2, 4, 6]
# 第三個參數表示每N個取一個,上面的[::2]表示每兩個取一個,也就是隔一個取一個
# 倒序切片
print(li[-2:])
print(li[:-2])
#……[5, 6]
#……[0, 1, 2, 3, 4]
# 字串切片
# 字串 'xx' 和Unicode字串 u'xxx'也可以看成是一種list,每個元素就是一個字元
str = 'abcdefg'
print(str[:5])
#……abcde
# 2 tuple元組======================================================
# 元組是一個“唯讀”的list,創建後不能再修改
# 沒有append、insert、pop等list方法;
# 按索引訪問的方法與list是一樣的
Tclassmate = ('Mike','Bob','Tracy')
print(Tclassmate)
#……('Mike', 'Bob', 'Tracy')
print(Tclassmate[-1])
#……Tracy
# tuple內可以包含可變的list
t = (1,2,3,[4,5,6])
print(t)
#……(1, 2, 3, [4, 5, 6])
# tuple內的list物件可以通過t[3]拿到
tl = t[3]
print(tl)
#……[4, 5, 6]
tl[0]=40
print(t)
#……(1, 2, 3, [40, 5, 6])
# 3 迴圈與語句塊====================================================
# for語句
for name in classmate:
print(name)
#output:
'''
zwu
Lisa
Tracy
'''
# 上面迴圈語句後的冒號:表示語句塊的開始,相同的縮進表示一個語句塊
# 縮進統一用4個空格表示
# 如果你在交互環境下敲代碼,退出縮進需要多敲一行回車
# 4 dict字典====================================================
# list和tuple可用用來表示順序集合,如班裡的名字和考試成績的列表:
Ln = ['Adam','Lisa','Seldon']
Lc = [95,86,61]
# 如果要根據名字找到對應的成績,用兩個list表示就不是很方便
# python的dict就可以把名字和成績關聯起來,組成鍵值項
# dict的定義:{key:value,……}
d = {
'Adam':95,
'Lisa':86,
'Seldon':61
}
print(d)
#……{'Adam': 95, 'Lisa': 86, 'Seldon': 61}
# 計算集合的大小
print(len(d))
#……3
# 訪問dict,不同於list和tuple使用索引,dict使用key訪問
print(d['Seldon'])
#……61
# 通過key訪問dict的value,只要key存在,dict就返回對應的value;
# 如果key不存在,會直接報錯:keyError
# 要避免keyError發生,有兩個方法:
# I 用in操作符判斷key是否存在
if 'Lisa' in d:
print(d['Lisa'])
# II 使用dict提供的一個get方法,在key不存在時,返回None
print(d.get('Seldon'))
#……61
print(d.get('wwu6'))
#……None
# dict的特點
# I 查找速度快,但佔用記憶體大;
# II 由於dict是按key查找的,所在在一個dict中,key不能重複;
# III 元素鍵值對key:value沒有順序;
# IV key不可變,不能用list作key,字串、整數、浮點數都行,當然list可以用作value;
# 更新dict
d['wwu'] = 66
print(d)
#……{'Adam': 95, 'Lisa': 86, 'Seldon': 61, 'wwu': 66}
# 如果key存在,則賦值會用新的value代替原來的value
d['Seldon'] = 99
print(d)
#……{'Adam': 95, 'Lisa': 86, 'Seldon': 99, 'wwu': 66}
# 遍歷dict
for key in d:
print(key)
#output:
'''
Adam
Lisa
Seldon
wwu
'''
# 5 set集合=================================================
# dict的作用是建立一組key和value的對應關係,dict的key是不能重複的;
# 有時候,我們只需要考慮key是否存在,這時set就派上用場了
# set持有一系列元素,這一點與list很像;
# 但是set的元素沒有重複,而且是無序的,這一點與dict的key很像
# 創建set,一般用list來創建set
s = set(classmate)
print(s)
#……{'zwu', 'Lisa', 'Tracy'}
# 求set大小
print(len(s))
#……3
# 遍歷set
for names in s:
print(names)
#output:
'''
zwu
Tracy
Lisa
'''
# 使用操作符in訪問set中的元素
print('Lisa' in s)
#……True
# set的特點
# I set的內部結構與dict很像,唯一的區別是不存儲value,因此,判斷一個元素是否在set中速度很快
# II set存儲的元素和dict的key類似,必須是不變物件;
# III set存儲的元素沒有順序;
# set應用
weekdaysS = ['Mon','Tue','Wed','Thu','Fri','Sat','sun']
weekdays = (weekdaysS)
x = 'Thu'
if x in weekdays:
bo = True
else:
bo = False
print(bo)
#……True
# 更新set之添加元素
s.add('wwu2')
print(s)
#……{'zwu', 'Lisa', 'Tracy', 'wwu2'}
# 如果添加的元素已經存在於set中,add()不會報錯,但也不會把元素添加進去
# 更新set之刪除元素
s.remove('wwu2')
print(s)
#……{'Tracy', 'zwu', 'Lisa'}
# 如果想要刪除的元素在set中不存在,remove()會報錯
#6 函數==========================
def power(x,n):
s = 1
while n>0:
n = n - 1
s = s * x
return s
print(power(2,10))
#……1024
# 函數也可以定義預設參數
def power(x,n = 2):
s = 1
while n>0:
n = n - 1
s = s * x
return s
print(power(100))
#……10000
# 可以返回多值
def op(a,b):
x = a + b
y = a - b
return x,y
print(op(9,7))
#……(16, 2)
i,j = op(9,7)
print(i,j)
#……16 2
# 遞迴函數
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
print(fact(10))
#……3628800
# 定義可變參數
# 也就是函數可以接收任意多個參數
def fn(*args):
print(args)
print(fn(1,2,3))
#……(1, 2, 3)
#在可變參數函數中,變數args相當於一個tuple
def average(*args):
sum = 0;
i = 0;
for n in args:
sum = sum + n
i = i + 1
return sum/i
print(average(61,86,99))
#……82.0
# 7 有序集合的索引iteration反覆運算========================================
# 在python中,反覆運算是通過for……in來完成的
# in後的集合可以用在list、tuple、dict、set上,也可以用在其他任何可以反覆運算的物件上
# 反覆運算操作就是依次取出一個集合中的每一個元素,集合可以是無序或有序
# 索引反覆運算
for index, name in enumerate(s):
print(index, "-", name)
#output:
'''
0 - Tracy
1 - zwu
2 - Lisa
'''
# enumerate(s)把['Tracy', 'zwu', 'Lisa']變成了類似:
# [(0,'Tracy'),(1,'zwu'),(2,'Lisa')]
# 所以上面的反覆運算相當於以下結構
for t in enumerate(s):
index = t[0]
name = t[1]
print(index, "-", name)
#output:
'''
0 - Tracy
1 - zwu
2 - Lisa
'''
# 反覆運算dict的value
for v in d.values():
print(v)
#output:
'''
95
86
99
66
'''
# 反覆運算鍵值對
for v in d.items():
print(v)
#output:
'''
('Adam', 95)
('Lisa', 86)
('Seldon', 99)
('wwu', 66)
'''
# 在反覆運算的鍵值對取value
for v in d.items():
print(v[1])
#output:
'''
95
86
99
66
'''
#用反覆運算生成列表
lin = []
for x in range(1,11):
lin.append(x)
print(lin)
#……[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 把反覆運算放在運算式中
lin2 = [x for x in range(1,11)]
print(lin2)
#……[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#for迴圈反覆運算dic
print(d)
#……{'Adam': 95, 'Lisa': 86, 'Seldon': 99, 'wwu': 66}
tds=['
print('
Name | Score |
---|
#……
'''
Name | Score |
---|---|
Adam | 95 |
Lisa | 86 |
Seldon | 99 |
wwu | 66 |
'''
# for迴圈和if判斷生成list
list2 = [x*x for x in range(1,11) if x % 2 == 0]
print(list2)
#……[4, 16, 36, 64, 100]
# 多層運算式
list3 = [m+n for m in 'ABC' for n in '123']
print(list3)
#……['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
#以上結構相當於:
list4 = []
for m in 'ABC':
for n in '123':
list4.append(m+n)
print(list4)
#……[' A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
# 把函數作為參數
def add(x,y,func):
return func(x) + func(y)
print(add(5,-8,abs))
#……13
# map()函數
list5 = [x for x in range(1,11)]
def funct(x):
return x*x
list6 = list(map(funct,list5))
print(list6)
#……[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# map函數依次接收清單的每個元素作為參數完成函數的計算,形成一個新的清單,
# 相當於一個函數清單,每個函數的參數是作為參數的清單的每個元素
# filter()函數
def isodd(x):
return x%2 == 1
list8 = list(filter(isodd,list5))
print(list8)
#……[1, 3, 5, 7, 9]
def isnotempty(s):
return s and len(s.strip()) > 0
str = list(filter(isnotempty,' this is a test '))
print(''.join(str))
# ……thisisatest
a = ' 123 '
print(a.strip())
#……123
# list排序函數
# python內置函數可對list進行排序
list0 = [36,5,12,9,21]
list2 = sorted(list0)
print(list2)
#……[5, 9, 12, 21, 36]
# list倒序排序
list3 = sorted(list0,reverse=True)
print(list3)
#……[36, 21, 12, 9, 5]
# sorted也支援對字串元素進行排序,預設按ASCII大小來比較
list4 = ['John','Henrry','zwu','Zyi','john']
list5 = sorted(list4)
print(list5)
#……['Henrry', 'John', 'Zyi', 'john', 'zwu']
-End-
附原始程式碼:
# 1 list清單=================================================
# list是一種有序的集合,可以隨時訪問、添加和刪除其中的元素
#
僅從操作方式上看,清單像是陣列和鏈表的綜合體。
# 除按索引訪問外,還支援插入、添加、刪除等操作,完全可當作佇列和棧使用。
# 如不考慮性能問題,清單似乎是一種易使用且功能完善的理想資料結構。
# 創建list
classmate = ['Mike','Bob','Tracy']
print(classmate)
#(#……代表print輸出)
#……['Mike', 'Bob', 'Tracy']
# 由於python是動態語言,所以list中包含的元素並不要求都必須是同一種資料類型
L = ['Mike',100,True]
print(L)
#……['Mike', 100, True]
# 按照索引訪問list
print(classmate[0])
#……Mike
# list還可以倒序訪問
print(classmate[-1])
#……Tracy
# 添加新元素
classmate.append('wwu')
print(classmate)
#……['Mike', 'Bob', 'Tracy', 'wwu']
# 插入新元素
classmate.insert(0,'zwu')
print(classmate)
#……['zwu', 'Mike', 'Bob', 'Tracy', 'wwu']
# 從list未尾刪除元素
classmate.pop()
print(classmate)
#……['zwu', 'Mike', 'Bob', 'Tracy']
# 從list指定位置刪除元素
classmate.pop(2)
print(classmate)
#……['zwu', 'Mike', 'Tracy']
#list中替換元素
classmate[1] = 'Lisa'
print(classmate)
#……['zwu', 'Lisa', 'Tracy']
#把一個list拼接成一個字串
print(' '.join(classmate))
#……zwu Lisa Tracy
#對list進行slice切片操作
# 也就是取list的部分資料,[start,end]
li = [0,1,2,3,4,5,6]
print(li[0:4])
#……[0, 1, 2, 3]
# li[0:4]可以簡寫成li[:4]
print(li[4:6])
#……[4, 5]
print(li[:])
#……[0, 1, 2, 3, 4, 5, 6]
# 切片操作還可以指定第三個參數
print(li[::2])
#……[0, 2, 4, 6]
# 第三個參數表示每N個取一個,上面的[::2]表示每兩個取一個,也就是隔一個取一個
# 倒序切片
print(li[-2:])
print(li[:-2])
#……[5, 6]
#……[0, 1, 2, 3, 4]
# 字串切片
# 字串 'xx' 和Unicode字串 u'xxx'也可以看成是一種list,每個元素就是一個字元
str = 'abcdefg'
print(str[:5])
#……abcde
# 2 tuple元組======================================================
# 元組是一個“唯讀”的list,創建後不能再修改
# 沒有append、insert、pop等list方法;
# 按索引訪問的方法與list是一樣的
Tclassmate = ('Mike','Bob','Tracy')
print(Tclassmate)
#……('Mike', 'Bob', 'Tracy')
print(Tclassmate[-1])
#……Tracy
# tuple內可以包含可變的list
t = (1,2,3,[4,5,6])
print(t)
#……(1, 2, 3, [4, 5, 6])
# tuple內的list物件可以通過t[3]拿到
tl = t[3]
print(tl)
#……[4, 5, 6]
tl[0]=40
print(t)
#……(1, 2, 3, [40, 5, 6])
# 3 迴圈與語句塊====================================================
# for語句
for name in classmate:
print(name)
#output:
'''
zwu
Lisa
Tracy
'''
# 上面迴圈語句後的冒號:表示語句塊的開始,相同的縮進表示一個語句塊
# 縮進統一用4個空格表示
# 如果你在交互環境下敲代碼,退出縮進需要多敲一行回車
# 4 dict字典====================================================
# list和tuple可用用來表示順序集合,如班裡的名字和考試成績的列表:
Ln = ['Adam','Lisa','Seldon']
Lc = [95,86,61]
# 如果要根據名字找到對應的成績,用兩個list表示就不是很方便
# python的dict就可以把名字和成績關聯起來,組成鍵值項
# dict的定義:{key:value,……}
d = {
'Adam':95,
'Lisa':86,
'Seldon':61
}
print(d)
#……{'Adam': 95, 'Lisa': 86, 'Seldon': 61}
# 計算集合的大小
print(len(d))
#……3
# 訪問dict,不同於list和tuple使用索引,dict使用key訪問
print(d['Seldon'])
#……61
# 通過key訪問dict的value,只要key存在,dict就返回對應的value;
# 如果key不存在,會直接報錯:keyError
# 要避免keyError發生,有兩個方法:
# I 用in操作符判斷key是否存在
if 'Lisa' in d:
print(d['Lisa'])
# II 使用dict提供的一個get方法,在key不存在時,返回None
print(d.get('Seldon'))
#……61
print(d.get('wwu6'))
#……None
# dict的特點
# I 查找速度快,但佔用記憶體大;
# II 由於dict是按key查找的,所在在一個dict中,key不能重複;
# III 元素鍵值對key:value沒有順序;
# IV key不可變,不能用list作key,字串、整數、浮點數都行,當然list可以用作value;
# 更新dict
d['wwu'] = 66
print(d)
#……{'Adam': 95, 'Lisa': 86, 'Seldon': 61, 'wwu': 66}
# 如果key存在,則賦值會用新的value代替原來的value
d['Seldon'] = 99
print(d)
#……{'Adam': 95, 'Lisa': 86, 'Seldon': 99, 'wwu': 66}
# 遍歷dict
for key in d:
print(key)
#output:
'''
Adam
Lisa
Seldon
wwu
'''
# 5 set集合=================================================
# dict的作用是建立一組key和value的對應關係,dict的key是不能重複的;
# 有時候,我們只需要考慮key是否存在,這時set就派上用場了
# set持有一系列元素,這一點與list很像;
# 但是set的元素沒有重複,而且是無序的,這一點與dict的key很像
# 創建set,一般用list來創建set
s = set(classmate)
print(s)
#……{'zwu', 'Lisa', 'Tracy'}
# 求set大小
print(len(s))
#……3
# 遍歷set
for names in s:
print(names)
#output:
'''
zwu
Tracy
Lisa
'''
# 使用操作符in訪問set中的元素
print('Lisa' in s)
#……True
# set的特點
# I set的內部結構與dict很像,唯一的區別是不存儲value,因此,判斷一個元素是否在set中速度很快
# II set存儲的元素和dict的key類似,必須是不變物件;
# III set存儲的元素沒有順序;
# set應用
weekdaysS = ['Mon','Tue','Wed','Thu','Fri','Sat','sun']
weekdays = (weekdaysS)
x = 'Thu'
if x in weekdays:
bo = True
else:
bo = False
print(bo)
#……True
# 更新set之添加元素
s.add('wwu2')
print(s)
#……{'zwu', 'Lisa', 'Tracy', 'wwu2'}
# 如果添加的元素已經存在於set中,add()不會報錯,但也不會把元素添加進去
# 更新set之刪除元素
s.remove('wwu2')
print(s)
#……{'Tracy', 'zwu', 'Lisa'}
# 如果想要刪除的元素在set中不存在,remove()會報錯
#6 函數==========================
def power(x,n):
s = 1
while n>0:
n = n - 1
s = s * x
return s
print(power(2,10))
#……1024
# 函數也可以定義預設參數
def power(x,n = 2):
s = 1
while n>0:
n = n - 1
s = s * x
return s
print(power(100))
#……10000
# 可以返回多值
def op(a,b):
x = a + b
y = a - b
return x,y
print(op(9,7))
#……(16, 2)
i,j = op(9,7)
print(i,j)
#……16 2
# 遞迴函數
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
print(fact(10))
#……3628800
# 定義可變參數
# 也就是函數可以接收任意多個參數
def fn(*args):
print(args)
print(fn(1,2,3))
#……(1, 2, 3)
#在可變參數函數中,變數args相當於一個tuple
def average(*args):
sum = 0;
i = 0;
for n in args:
sum = sum + n
i = i + 1
return sum/i
print(average(61,86,99))
#……82.0
# 7 有序集合的索引iteration反覆運算========================================
# 在python中,反覆運算是通過for……in來完成的
# in後的集合可以用在list、tuple、dict、set上,也可以用在其他任何可以反覆運算的物件上
# 反覆運算操作就是依次取出一個集合中的每一個元素,集合可以是無序或有序
# 索引反覆運算
for index, name in enumerate(s):
print(index, "-", name)
#output:
'''
0 - Tracy
1 - zwu
2 - Lisa
'''
# enumerate(s)把['Tracy', 'zwu', 'Lisa']變成了類似:
# [(0,'Tracy'),(1,'zwu'),(2,'Lisa')]
# 所以上面的反覆運算相當於以下結構
for t in enumerate(s):
index = t[0]
name = t[1]
print(index, "-", name)
#output:
'''
0 - Tracy
1 - zwu
2 - Lisa
'''
# 反覆運算dict的value
for v in d.values():
print(v)
#output:
'''
95
86
99
66
'''
# 反覆運算鍵值對
for v in d.items():
print(v)
#output:
'''
('Adam', 95)
('Lisa', 86)
('Seldon', 99)
('wwu', 66)
'''
# 在反覆運算的鍵值對取value
for v in d.items():
print(v[1])
#output:
'''
95
86
99
66
'''
#用反覆運算生成列表
lin = []
for x in range(1,11):
lin.append(x)
print(lin)
#……[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 把反覆運算放在運算式中
lin2 = [x for x in range(1,11)]
print(lin2)
#……[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#for迴圈反覆運算dic
print(d)
#……{'Adam': 95, 'Lisa': 86, 'Seldon': 99, 'wwu': 66}
tds=['
print('
Name | Score |
---|
#……
'''
Name | Score |
---|---|
Adam | 95 |
Lisa | 86 |
Seldon | 99 |
wwu | 66 |
'''
# for迴圈和if判斷生成list
list2 = [x*x for x in range(1,11) if x % 2 == 0]
print(list2)
#……[4, 16, 36, 64, 100]
# 多層運算式
list3 = [m+n for m in 'ABC' for n in '123']
print(list3)
#……['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
#以上結構相當於:
list4 = []
for m in 'ABC':
for n in '123':
list4.append(m+n)
print(list4)
#……[' A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
# 把函數作為參數
def add(x,y,func):
return func(x) + func(y)
print(add(5,-8,abs))
#……13
# map()函數
list5 = [x for x in range(1,11)]
def funct(x):
return x*x
list6 = list(map(funct,list5))
print(list6)
#……[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# map函數依次接收清單的每個元素作為參數完成函數的計算,形成一個新的清單,
# 相當於一個函數清單,每個函數的參數是作為參數的清單的每個元素
# filter()函數
def isodd(x):
return x%2 == 1
list8 = list(filter(isodd,list5))
print(list8)
#……[1, 3, 5, 7, 9]
def isnotempty(s):
return s and len(s.strip()) > 0
str = list(filter(isnotempty,' this is a test '))
print(''.join(str))
# ……thisisatest
a = ' 123 '
print(a.strip())
#……123
# list排序函數
# python內置函數可對list進行排序
list0 = [36,5,12,9,21]
list2 = sorted(list0)
print(list2)
#……[5, 9, 12, 21, 36]
# list倒序排序
list3 = sorted(list0,reverse=True)
print(list3)
#……[36, 21, 12, 9, 5]
# sorted也支援對字串元素進行排序,預設按ASCII大小來比較
list4 = ['John','Henrry','zwu','Zyi','john']
list5 = sorted(list4)
print(list5)
#……['Henrry', 'John', 'Zyi', 'john', 'zwu']
-End-