分類
- 數值型
int、float、complex、bool - 序列對象
字符串str、列表list、tuple - 鍵值對
集合set、字典dict
數值型
- complex:有實數和虛數部分組成
- float:有整數和小數組成。只有雙精度
類型轉換
- int(X) 返回一個整數
- float(x) 返回一個浮點數
- complex(x)、complex(x,y) 返回一個復數
- bool(x) 返回布爾值
數字的處理函數
- round() 四舍六入五取偶
- floor() 地板,往下取
ceil() 天花板,往上取
- min()
max()
pow(x,y) 等于x**y
math.sqrt() - 進制函數
bin()
oct()
hex() - math.pi π
math.e 自然常數e
類型判斷
- type(obj),返回類型,而不是字符串
- isinstance(obj,class_or_tuple),返回布爾值
- 示例
列表list
- 特點
sequence
item (could be anything)
線性的數據結構
列表是可變的
使用[]表示 - 定義
list(iterable) -> new list initialized from iterable’s items
索引,也叫下標
- 正索引:從左至右,從0開始,為列表中每一個元素編號
- 負索引:從右至左,從-1開始
- 正負索引不可以超界
- 左邊是頭部,右邊是尾部,左邊是下界,右邊是上界
- 列表通過索引訪問
list[index],index就是索引,使用中擴號訪問
列表查詢
- index(value,[start,[stop]])
通過值value,從指定區間查找列表內的元素是否匹配
匹配第一個值就立即返回索引 - count(value)
返回列表中匹配value的次數 - 時間復雜度
index和count都是O(n)
隨著列表數據規模越大,效率越低 - len()
獲得list元素的個數
列表基本操作
- list[index] = value
- append(obj) -> None
尾部追加元素,返回None
就地修改
時間復雜度O(1)lst=[2,3] lst.append(1)
- insert(index,object) ->None #很少用到
超越上界,尾部追加
超越下屆,頭部追加 - extend(iteratable) -?None
將可迭代對象的元素追加進來,返回None,就地修改 - + ->list
將兩個列表連接起來,產生新的列表 - * ->list
重復操作,將本列表元素重復n次,返回新的列表
# a=[[1]]*3只是復制了引用(門牌號),當對三者中任何一個發生改變,其他兩個也會相應的改變
# b=[[1],[1],[1]]里面就是不同的三個引用
- remove(value) -> None
從左至右查找第一個匹配value的值,移除該元素,返回None
就地修改 #用的比較少,一般用pop - pop(index) ->item
不指定索引index,就從列表尾部彈出一個元素 - clear() ->None
清楚列表所有元素,剩下一個空列表 - reverse() ->None
將列表元素反轉 - sort(key=None,reverse=False) ->None
對列表元素進行排序,就地修改,默認升序
reverse為True,反轉,降序
key為一個函數,指定key按照什么規則排序 - in
[3,4] in [1,2,[3,4]]
for x in [1,2,3,4]
列表復制
- copy() -> list
- shadow copy
淺拷貝,遇到引用類型,只是復制了一個引用而已(記下了門牌號)
- 深拷貝
import copy lst=[1,2,[3,4],5] lst1=copy.deepcopy(lst) lst[2][1]=20 lst==lst1,lst is lst1
隨機數
- random模塊
- randint(a,b) 返回[a,b]之間的整數
- choice(seq) 從非空序列的元素中隨機挑選一個元素,比如random.choice(range(10))
- randrange 從集合中獲取一個號隨機數
random.randrange)(1,7,2) - random.shuffle(list) ->None
就地打亂列表元素
注意
- 列表list用for循環進行遍歷的時候,會出錯,不建議這樣使用
- 例1
- 例2 ,利用index來遍歷刪除
這樣雖然刪除了,但是列表l變成l=[1,2,3,4,5],就報錯了
range的開始范圍是0-4,中間遍歷的時候刪除了一個元素4,這個時候列表就變成了l=[1,2,3,5],這時候就會報錯了,提示超界,原因就是遍歷的時候刪除了元素
- 例1
tuple 元組
- 特點
一個有序的元素組成的集合
使用()表示
不可變對象- 元組是只讀的,增、改、刪都沒有
- 定義
tuple(iterable) -> tuple initialized from iterable’s itemst=tuple() t=(1,2,3,4) t=(1,) #一個元素定義必須有逗號
索引
- 知識點同list
- 元組通過索引訪問
tuple[index],index就是索引,使用中擴號訪問t[-1]=4
查詢
- 查詢同list
- 主要記住 len(tuple)
命名元組namedtuple
- namedtuole(typename,field_names,verbose=False,rename=False)
- 命名元組,返回一個元組的子類,并定義了字段
- field_names可以是空格或逗號分割的字段的字符串,可以是字段的列表
冒泡法
- 交換排序
- 第一輪比較,需要比較n-1次,第二輪是n-2次,以此類推,最后只剩下兩個數比較
- 最差的排序情況是,初始順序與目標順序完全相反,遍歷次數就是n-1,……,1的和n(n-1)/2
- 例如[4,3,2,1]要求升序排序[1,2,3,4]
- 最好的排序情況是,初始順序與目標順序相同,遍歷n-1次
- 時間復雜度O(n2)
- 簡單冒泡法實現
numlist = [[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9]] nums = numlist[1] print(nums) length = len(nums) count_swap = 0 count = 0 for i in range(length): for j in range(length-i-1): count += 1 if nums[j] > nums[j+1]: tmp = nums[j] nums[j] = nums[j+1] nums[j+1] = tmp count_swap += 1 print(nums,count_swap,count) # count_swap是為了查看交換的次數 # count是為了查看進行了多少次比較(包括沒有交換的比較)
- 優化版(錯誤示范)
numlist = [[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,9,8]] nums = numlist[1] print(nums) length = len(nums) count_swap = 0 count = 0 flag=False for i in range(length): for j in range(length-i-1): count += 1 if nums[j] > nums[j+1]: tmp = nums[j] nums[j] = nums[j+1] nums[j+1] = tmp flag = True count_swap += 1 if not flag: break print(nums,count_swap,count)
# flag=Flash放錯位置了,放在最上面不起作用,只有放在for i循環下面才起作用。 # 如果for j的第一次循環沒有比較的話(也就是123456789這樣的排序),那么這次循環后就會結束,其他的情況都是在第一次循環會進行比較交換,也就是執行了if語句,那么flag就變成了True,這樣在后面的循環中,哪次循環沒有比較才會break。 # 這樣大大提高了效率
- 優化(正確) *****記住
numlist = [[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,9,8]] nums = numlist[1] print(nums) length = len(nums) count_swap = 0 count = 0 for i in range(length): flag = False for j in range(length-i-1): count += 1 if nums[j] > nums[j+1]: tmp = nums[j] nums[j] = nums[j+1] nums[j+1] = tmp flag = True count_swap += 1 if not flag: break print(nums,count_swap,count)
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87559