python線性資料結構
[toc]
碼好python的每一篇文章.
本章要介紹的線性結構:list、tuple、string、bytes、bytearray。
對於這兩種表,陣列中的元素進行查詢、增加、刪除、修改,看看有什麼影響:
說明: 列表是由若干元素物件組成,且是有序可變
的線性資料結構,使用中括號[ ]
表示。
count( ) 方法:l.count(value) -> integer
返回的是元素出現的次數,要迭代列表,時間複雜度為o(n)。
lst = ['a','b','a','b']
print(lst.count('a'))
# 輸出結果如下:
2
len( ) 方法:返回的是列表元素的個數,時間複雜度為o(1)。
lst = ['a','b','c','d']
print(len(lst))
# 輸出結果如下:
4
備註:所謂的o(n) 是指隨著資料的規模越來越大,效率下降,而o(1)則相反,不會隨著資料規模大而影響效率。
示例二:淺拷貝copy
lst1[1][0] = 200 # 修改列表的引用型別,所有列表都會改變
print(lst1, lst2)
# 輸出結果如下:
1922175854408 1922175854344 true [1, [2, 3], 4]
******************************
[1, [200, 3], 4] [1, [200, 3], 4]
示例三:深拷貝deepcopy
lst1[1][0] = 200 # 修改列表的引用型別,不會影響其他列表
print(lst1, lst2)
# 輸出結果如下:
2378580158344 2378580158280 true [1, [2, 3], 4]
******************************
[1, [200, 3], 4] [1, [2, 3], 4]
說明: 元組是由若干元素物件組成,且是有序不可變
的資料結構,使用小括號( )
表示。
說明: 字串是由若干字元組成,且是有序不可變
的資料結構,使用引號表示。
splitlines() 方法:s.splitlines([keepends]) -> list of strings
按行來切割字串,keepends表示是否保留行分隔符,最後返回列表。
str = "a\nb\nc\r\nd"
print(str.splitlines())
print(str.splitlines(keepends=true))
# 輸出結果如下:
['a', 'b', 'c', 'd']
['a\n', 'b\n', 'c\r\n', 'd']
partition() 方法:s.partition(sep) -> (head, sep, tail)
從左至右查詢分隔符,遇到就分割成頭、分隔符、尾的三元組,返回的是乙個元組tuple。
str = "a*b*c*d"
print(str.partition('*'))
# 輸出結果如下:
('a', '*', 'b*c*d')
rpartition() 方法:s.rpartition(sep) -> (head, sep, tail)
與上方法不同,就是從右至左,不過這個比較常用,可以獲取字尾部分資訊。
str1 = ""
str2 = str1.rpartition(':')
port = str2[-1]
print(port)
format格式化:
格式字串:使用花括號, 花括號裡面可以使用修飾符。
被格式的值:args為可變位置引數,*kwargs為可變關鍵字引數。
# 位置傳參
print("ip={} port={}".format('8.8.8.8',53)) # 位置傳參
print(": ip= port=".format(53, '8.8.8.8', server='dns server')) # 位置和關鍵字傳參傳參
# 輸出結果如下:
ip=8.8.8.8 port=53
dns server: ip=8.8.8.8 port=53
# 浮點數
print("{}".format(0.123456789))
print("".format(0.123456789)) # 小數點預設為6位
print("".format(0.123456789)) # 取小數點後兩位
print("".format(0.123456789)) # 寬度為15,右對齊
# 輸出結果如下:
0.123456789
0.123457 # 為什麼是這個值?大於5要進製
0.12
0.123456789 # 左邊有4個空格
bytes
和bytearray
從python3引入的兩種資料型別。
在計算機的世界裡,機器是以0
和1
組成的,也叫二進位制(位元組)來通訊的,這套編碼我們叫做ascii
編碼。
所以機器通訊的語言就叫做機器語言。然而我們人類想要跟機器通訊,那麼需要怎麼做呢?
至今現代編碼的發展史過程大概是這樣的:ascii(1位元組) -> unicode(24位元組) -> utf-8(16位元組),utf8是多位元組編碼,一般使用1~3位元組,特殊使用4位元組(一般中文使用3位元組),向下相容ascii編碼。
中國也有屬於自己的編碼:gbk
所以,機器上的進製就是位元組,1位元組等於8位,例如:十進位制2,用2進製和16進製表示:
# 二進位制
0000 0010 # 乙個位元組bytes
# 16進製制,機器基本都是顯示16進製制
0x2
bytes 是不可變型別
bytes() # 空bytes,一旦建立不可改變
bytes(int) # 指定位元組的大小,用0填充
bytes(iterable_of_ints) # [0.255]整數的可迭代物件
bytes(string, encoding[, errors]) # 等價於string.encoding(),字串編碼成位元組
bytes(bytes_or_buffer) # 複製乙份新的位元組物件
bytearray是可變陣列,可以進行增刪改操作,類似列表。
bytearray() # 空bytearray,可改變
bytearray(iterable_of_ints) # [0.255]整數的可迭代物件
bytearray(string, encoding[, errors]) # 等價於string.encoding(),字串編碼成位元組
bytearray(bytes_or_buffer) # 複製乙份新的位元組陣列物件
bytearray(int) # 指定位元組的大小,用0填充
Python線性資料結構
python線性資料結構 目錄碼好python的每一篇文章.本章要介紹的線性結構 list tuple string bytes bytearray。說明 列表是由若干元素物件組成,且是有序可變的線性資料結構,使用中括號 表示。說明 元組是由若干元素物件組成,且是有序不可變的資料結構,使用小括號 表...
Python資料結構01 線性結構
後進先出的結構,主要有如下操作 stack push item pop peek isempty size class stack def init self self.items def push self,item def pop self return self.items.pop def p...
python資料結構 2 線性資料結構 棧
2.棧的應用 總結在這個系列的第一篇部落格中,我主要強調了程式設計思維的重要性以及如何高效準確的編寫出能解決問題的 這一篇部落格開始就正式開始python資料結構相關的知識。有一種資料結構,它的元素順序取決於新增的順序或者刪除的順序,一旦某個元素被新增進來,它與前後元素的相對位置也就保持不變了,這樣...