chapter . 2.二、Python內置數據結構:字符串、字節和字節數組

字符串

有序的序列,是字符的集合python

使用單引號,雙引號,三引號引注的字符序列git

字符串是不可變對象,咱們看到的合併字符串,實際上是返回一個由原來兩個值複製後返回的值,會佔用新的空間。sql

從python3起,字符串是Unicode類型windows

  s1 = 'string'api

  s2 = '''this's a "string'''數組

  s3 = r"hello \n aasdasd"       :r和R表示忽略轉義app

  s4 = R'windows \net'ide

  sql = """select*from user where name='tom'"""  :三引號內能夠換行函數

字符串元素支持下標訪問this

字符串中的空格也是一個字符串

有序,可迭代

l1=list(sql),將元素迭代放入列表

l2=[sql],將總體放入列表

 

join    

鏈接可迭代對象,使用給定的字符串拼接,返回字符串,可迭代對象自己元素都是字符串。

"sting".join(iterable)-->str  返回字符串

','.join(map(str,range(10))),將1-9轉換爲字符串,用逗號分割。

map函數,map(function,iterable,...),根據提供的函數對指定序列作映射,對可迭代對象裏的每個元素進行處理,返回一個新列表。

  print("\"".join(lst))    #分隔符是雙引號

  print(  "\n".join(lst))

  '\n'.join('1','2','3')以\n分割,能夠打印時使用

字符串

+ -- > str    :將兩個字符串鏈接,返回新的字符串

字符串分割

 

spilt系  返回列表

split(sep=None,maxsplit=-1)  ,

  sep=None默認以空格字符串字符切割,多個空格以一個處理,\t\n\r都是空白字符。

  maxsplit表示最大切的刀數,從左到右,默認-1表示能切多少切多少。

將字符串按照分隔符分割成若干字符,返回列表,若是沒有切割點,就返回整個字符串放入列表

注意轉義符。以\n分割表示將內容以換行符分割。

join與split是相反的一對操做

  '\n'.join("@".join(['1','2','3']).split('@')+['4'])  :將‘1‘’2’‘3’以‘@’鏈接,再以’@‘分割,再和’4‘相加返回新列表,以\n分割。

rsplit   :倒切,從右至左分割,

splitlines(keepends=False)  :以\n切割,沒有不切,keepends開啓時保留換行符,換行符有\r,\n,\r\n等

 

partition系  返回元組

  :將字符串分割爲兩段,返回2段和分隔符元組,

  可用來分割電話號碼,文件目錄。

  空字符串做爲分隔符會報錯,必須指定分割符

rpartition:倒切,若是沒有切割符,就切成整個字符串和兩個空串

 partition 和split  在小範圍使用較爲合適,一旦數據規模增大,就會形成空間佔用增大,每次切割都要返回新的列表。

 

字符串大小寫
upper   :全大寫

lower   :全小寫

判斷時使用 ,處理用戶輸入時可用

swapcase:交互大小寫

 

字符串排版

title() -- > str   :標題單詞大寫,全部首字母大寫

capitalize() -- >str   :首個單詞大寫

center(width[,fillchar]) --> str   :居中,使用fillchar填充,width爲寬度

zfill(width)  打印寬度,居右用0填充

ljust(widht) -- > 左對齊

rjust(width) -- > 右對齊

以上所有在命令界面,在展現給客戶看時,要有交互界面,或者網頁上。

 

字符串修改

replace(old,new[,count]) -- >str

替換字符串中的字串爲新子串,返回新字符串,count表示替換次數,不指定就替換所有。

若是新字符串字符包含較多字符,在字符串檢測中,是一位一位後移的,不會後退,好比替換aaa中的aa,從左至右先換左邊的aa,第三個a不會從新計算前邊檢測過的。

strip([chars]) -- > str

  從兩端去除指定字符集中的全部字符,若是chars沒有指定,取出兩端的空白字符,若是指定去除的字符串爲空格,則只除去空格,不是去除全部空白字符

  一旦找到字符集中沒有的元素,就中止。

lstrip  :從左端開始去除

rstrip  :從右端開始去除

用來去除數據中的多餘字符,返回新字符串.

空串爲空,空白字符串爲有空白的字符串

 

字符串查找

find(sub,[,start[,end]])可指定區間,從左至右搜尋指定子串,找到返回正索引,不然返回-1

rfind(sub,[,start[,end]])從右至左查找子串sub,返回正索引,不然返回-1

找到第一個就返回索引,若是沒有就會遍歷

index(sub,[,start[,end]])-->int  :可指定區間,在區間內從左至右查找字串,找到返回索引,不然拋出異常ValueError

rindex(sub,[,start[,end]])-->int  :可指定區間,在區間內從右至左查找字串,找到返回索引,不然拋出異常ValueError

find 和 index 都是時間複雜度爲O(n),隨數據規模的增大,效率降低

len(string)  :返回字符串長度,字符個數

 

字符串判斷

endswith(suffix[,start[,end]]) -- > bool  :在指定區間判斷字符串是不是suffix結尾,返回波爾值

startswith(prefix[,start[,end]]) -- > bool  :在指定區間判斷字符串是不是prefix,返回波爾值

find('www',0,3)  :經常使用這種方式判斷開頭,不會遍歷

可用來判斷文件類型,是否以.txt.jpg.pdf等結尾,左閉右開區間

isalnum() --> bool 是否字母數字組成

isalpha()  是不是字母,其餘都不行

isdecimal() 是否只包含十進制數字

isdigit() 是否所有數字0~9

isidentifier() 是否字母下劃線開頭,其餘都是字母,數字,下劃線,判斷標識符

islower

isupper

isspace()是否只包含空白字符

 

字符串格式化

join拼接要使用分隔符,且要求拼接對象可迭代

+要求轉換非字符串格式爲字符串格式

printf-style formatting  來自C語言的printf函數

  佔位符用%表示

  %03d  表示打印三個位置,不夠前邊補零,d表示數字格式,s表示字符串格式

  %3.2f  3表示寬度,位數大於寬度時,顯示位數,數字大小不能改變,.2表示精度,小數點後兩位,會四捨五入

  %#x %#X  16進制,x表示小寫,X表示大寫

  ‘%-05d’ % 10  佔位5個寬,右側補零,若是沒有小數點,就補空格,沒有負號,就左側補零

能夠查手冊,關鍵字str method

 

format函數格式化字符串語法

'{}{xxx}'.format(*args,*kwargs)-->str

args位置參數,是一個元組

kwargs是關鍵字參數,是字典

花括號佔位符,{n}位置參數表示位置參數索引爲n的值

{xxx}表示在關鍵字參數中搜索名稱一致的,{{}}表示花括號

位置參數

’{}:{}‘.format('192.168.1.100',8888)按照位置對應

'{1}{0}'.format('a','b')輸出爲‘ba’

訪問元素  '{0[0]}.{0[1]}'.format(('magedu','com'))輸出爲magedu.com

訪問對象屬性  

  from collections import namedtuple
  Point=namedtuple('Point','x y')
  P=Point(4,5)
  '{{{0.x},{0.y}}}'.format(P)

  輸出{4,5}

對齊

'{0}*{1}={2:<02}'.format(3,2,2*3)  打印3*2=6,輸出後左移補零輸出爲‘3*2=60’

將0換爲#也能夠'{0}*{1}={2:#<2}'.format(3,2,2*3) ,輸出’3*2=6#‘

進制

"int{0:d};hex{0:x};oct{0:#o};bin{0:#b}".format(42)  輸出爲   'int42;hex2a;oct0o52;bin0b101010'

octets=[192,168,0,1]

'{:02X}{:02X}{:02X}{:02X}'.format(*octets)

輸出爲’C0A80001‘

浮點數

print('{:g}'.format(3**0.5))  精度g,還能夠爲f  輸出  1.73205

print('{:3.3%}'.format(1/3))寬度爲三,小數點後三位    輸出 33.333%

寬度不能改變數值的大小

reversed(),從列表中倒着一個個的取出數據,列表不發生變化,.reverse()列表會發生變化

 

字節和字節數組

bytes  :字節序列,不可變

bytearray  :字節數組,可變

字符串與bytes  :字符串是字符組成的有序序列,字符可使用編碼理解

  bytes是字節組成的不可變序列

  bytearray是字節組成的可變序列

編碼與解碼

  字符串按照不一樣的字符集編碼encode返回字節序列bytes:

  a.encode(encoding='utf-8', errors='strict')   -->bytes

  字節序列按照不一樣的字符集解碼decode返回字符串

  bytes.decode(encoding='utf-8',errors='strict')  -->str

  bytearray.decode(encoding='utf-8',error='strict')  -->str

ASCII:美國信息交換標準代碼

基於拉丁字母的一種單字節編碼系統

一個字節8位,共256種變化,從0-255,ASCII碼的0-127是經常使用

十六進制hex表示是,30是數字0,40是A的前一位,60是a的前一位

 

bytes定義

bytes()

bytes(int) 指定字節的bytes,被0填充

bytes(iterable_of_ints) -->bytes[0,255]的int組成的可迭代對象,超界報錯bytes must be in range(0, 256)左閉右開

bytes(string,encodeing[,errors]) -->bytes 等價於string.encode()    eg:   bytes('a',encoding='utf-8'),輸出爲b'a'

bytes(bytes_or_buffer) ->immutable copy of bytes_or_buffer 從一個字節序列或者buffer複製出一個新的不可變的bytes對象

使用b前綴定義

  只容許基本ASCII使用字符形式b'ac99'

  使用16進製表示b'\x41\x61'

bytes的操做和str相似

操做字節前邊必定要加b

replace,find,

bytes.fromhex(string)  :string必須是兩個字符的十六進制的數,空格忽略

'abc'.encode().hex()  返回16進製表示的字符串,

索引b'abcdef'[2] 返回字節對應的數,int類型

bytearray

bytearray()空bytearray

bytearray(int) 指定字節的bytes,被0填充

bytearray(iterable_of_ints) -->bytes[0,255]的int組成的可迭代對象,超界報錯bytes must be in range(0, 256)左閉右開

bytearray(string,encoding[,errors])   返回可變對象

注意,b前綴定義的是bytes類型

bytearray操做

replace,find

bytearray.fromhex(string)  :string必須是兩個字符的十六進制的數,空格忽略

bytearray('abc'.encode()).hex  返回16進製表示的字符串

索引bytearray(b'abcdef')[2] 返回字節對應的數,int類型

append  尾部追加

insert(index,int)  在指定索引位置插入元素

extend(iterable_of_ints)  將一個可迭代的整數集合追加到當前bytearray

pop(index=-1)  彈出元素,默認尾部

remove(value)  找到第一個value移除,找不到拋異常

clear()  清空

reverse()  翻轉,就地修改

 

int.from_bytes(bytes,byteorder)

將字節數組表示成整數

int.to_bytes(length,byteorder)

將一個整數表達成指定長度的字節數組

i=int.from_bytes(b'abc','big')

print(i,hex(i))  #6382179 0x616263

print(i.to_bytes(3,'big'))  #b'abc'

 

切片

線性結構(可迭代,可用len取長度,可經過下標訪問),就能夠切片

經過索引區間訪問線性結構的一段數據

sequence[start,stop]表示返回[start,stop]區間的子序列

[:]  表示從頭至尾,等效於copy()

步長切片

[start:stop:step]

step步長,能夠正負整數,默認1

step要和start:stop同向,不然返回空序列

相關文章
相關標籤/搜索