1. 程式人生 > >Python第一周 學習筆記_待補充(3)

Python第一周 學習筆記_待補充(3)

學習筆記

Python內置數據結構

一、數值型


1.數據類型分類:

int:整數

python3的int就是長整型,且沒有大小限制,受限於內存區域的大小
int(x) 返回一個整數

float:浮點數

有整數部分和小數部分組成。支持十進制和科學計數法表示。只有雙精度型。
float(x) 返回一個浮點數

complex:復數

有實數和虛數部分組成,實數和虛數部分都是浮點數,3+4.2J
complex(x)、complex(x,y) 返回一個復數

bool:布爾

int的子類,僅有2個實例True、False對應1和0,可以和整數直接運算
bool(x) 返回布爾值,bool值判斷邏輯一如前文所述,如:
bool(‘‘) --> False

bool(0) --> False

2.數字處理函數:

(1)int()、floor()、ceil()、round()、// 區別:

int():

builtin內置函數
官方文檔描述:
class int(x=0)
class int(x, base=10)
Return an integer object constructed from a number or string x, or return 0 if no arguments are given. If x is a number, return x.int(). For floating point numbers, this truncates towards zero.

If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in radix base. Optionally, the literal can be preceded by + or - (with no space in between) and surrounded by whitespace. A base-n literal consists of the digits 0 to n-1, with a to z (or A to Z) having values 10 to 35. The default base is 10. The allowed values are 0 and 2–36. Base-2, -8, and -16 literals can be optionally prefixed with 0b/0B, 0o/0O, or 0x/0X, as with integer literals in code. Base 0 means to interpret exactly as a code literal, so that the actual base is 2, 8, 10, or 16, and so that int(‘010‘, 0) is not legal, while int(‘010‘) is, as well as int(‘010‘, 8).

對於浮點數,截斷小數至零
即取整數部分

floor():

math模板
向下取整

ceil():

math模板
向上取整

round():

四舍六入五取偶

//:

整除並floor()
floored quotient of x and y

(2)數字處理函數_2

min()

min(iterable, [, key, default])
min(arg1, arg2,
args[, key])

max()

max(iterable, [, key, default])
max(arg1, arg2,
args[, key])

pow(x,y)

功能與x**y相同

math.sqrt()

開方

bin()

返回值為字符串

oct()

返回值為字符串

hex()

返回值為字符串

math.pi
math.e

(3)類型判斷

type(obj)

返回類型而不是字符串

isinstance(obj, class_or_tuple)

返回布爾值

二、序列對象


數據類型分類:

1.str:字符串

2.list:列表

列表內元素有順序,可以使用索引
線性的數據結構
列表是可變的

初始化
例:

lst=list()
lst=[]
lst=[1,2,‘a‘,[‘i‘,‘j‘]]
lst=[range(5)]

不能一開始就定義大小,對比java

列表list、鏈表、queue、stack的差異

list線性存儲,查詢效率高O(n),插入、刪除效率低O(n)
鏈表散落在內存中,查詢效率低O(n),插入、刪除效率高O(1)
queue先進先出FIFO
棧後進先出LIFO

列表索引訪問

正索引:從左至右,從0開始,為列表中每一個元素編號
負索引:從右至左,從-1開始

列表查詢

index(value,[start,[stop]])
返回第一個匹配項的索引
只能從左向右遍歷
匹配不到返回ValueError異常
時間復雜度O(n),因需遍歷列表

count(value)

返回列表中匹配value的次數
時間復雜度O(n),因需遍歷列表

len()

時間復雜度O(1)
計數器在每次向list中插入、刪除時執行計數
因此調用len()時只打出計數器數值,不執行遍歷操作

列表增加、插入元素
append(object) -> None

在尾部追加,返回None
修改原有對象,不生成新對象
時間復雜度O(1)

insert(index, object) -> None

在指定索引插入元素,返回None
修改原有對象,不生成新對象
時間復雜度O(n),因為插入後可能會發生後續元素在內存中進行依次後移操作

若index超界不報錯:
超越上界,尾部追加
超越下界,頭部追加

extend(iteratable) -> None

將可叠代對象的元素追加進來,返回None
修改原有對象,不生成新對象

+ -> list

連接操作,將兩個列表連接起來
產生新的對象,原列表不變
本質上調用的是add()方法

* -> list

重復操作,將本列表元素重復n次,返回新的列表

註意:
x=[[1,2,3]]
y=x*3
y[0][1]=200
y

結果為:
[[1, 200, 3], [1, 200, 3], [1, 200, 3]]

y = [1]*5
y[0] = 6
y[1] = 7
print(y)

結果為:
[6, 7, 1, 1, 1]

可暫時理解為:
*復制,對於復雜對象,復制的是引用,並非數據,復制的三個元素實際指向的是同一個內存地址
簡單對象不影響

列表刪除元素
remove(value) -> None

從左至右查找第一個匹配value的值,移除該元素,返回None
修改原有對象,不生成新對象
時間復雜度O(n),因為插入後可能會發生後續元素在內存中進行依次後移操作(列表在內存中連續順序存儲)

pop([index]) -> item

不指定索引index,就從列表尾部彈出一個元素
指定索引index,就從索引處彈出一個元素,索引超界拋出IndexError錯誤
時間復雜度:
不指定索引為O(1)
指定索引為O(n),因為插入後可能會發生後續元素在內存中進行依次前移操作(列表在內存中連續順序存儲)

clear() -> None

清除列表所有元素,剩下一個空列表

列表其它操作
reverse() -> None

將列表元素反轉,返回None
修改原有對象,不生成新對象

sort(key=None, reverse=False) -> None

對列表元素進行排序,默認升序
修改原有對象,不生成新對象
reverse為True,反轉,降序
key一個函數,指定key如何排序

in

3.tuple:元組

三、鍵值對


數據類型分類:

set:集合

dict:字典

Python第一周 學習筆記_待補充(3)