Python數據結構-字符串、bytes(切片)


1、類型

字符串是不可變的對象。(可變的是重新拼接組成的新的字符串)

一個個字符組成的有序的序列,是字符的集合。

使用單雙號、雙引號、三引號引住的字符序列。描述字符串,沒有放字符的為空字符串,長度為0,等同於None。

Python3中字符串就是unicode----8類型的。

生成新的值。Utf-8。

2、字符串定義初始化

 s2="string"   s3='''this is a"string"'''    s5='c:\windows\nt’  打印帶出斜杠的。

3、字符串元素訪問-----下標

1)字符串支持使用索引訪問。  sql[3].

 

4、join 

把可迭代對象的一個個字符串連接起來。

可迭代對象本身元素都是字符串。  “string”.join(iterbale)->str

返回一個新的字符串。      '---'.join(map(str,lst))

5、map

map(str.lst)轉換為字符串的方式。按照什么格式拼接字符串。

 

6、字符串+連接

1)     + -》str。將兩個字符串拼接在一起,返回一個新的字符串。‘a’*2

7、字符串的分割。

分為兩類。

1)Split() 沒有指定,盡可能多的空白字符作為一個空白分隔符。’’+

Split(sep=none,maxsplit=1)。不指定分隔符的時候,默認以空白字符進行分割。    

"a   b\tc".split()        從左至右

p sep 指定分割字符串,缺省的情況下空白字符串作為分隔符

p maxsplit 指定分割的次數,-1 表示遍歷整個字符串.

切的函數都是一刀兩斷。      "a,b,c,d,e".split(',',2)         不支持正則表達式。

2)rsplit(sep=None, maxsplit=-1) -> list of strings

 *從右向左

*sep 指定分割字符串,缺省的情況下空白字符串作為分隔符

* maxsplit 指定分割的次數,-1 表示遍歷整個字符串.

3)splitlines([keepends]) -> list of strings

* 按照行來切分字符串

* keepends 指的是是否保留行分隔符

* 行分隔符包括\n、\r\n、\r等

()括號里面的添加True,切割后顯示分隔符。False不顯示分隔符。

4)         Partition(seq)->(head,seq,tail)切割。切割完成后返回的是三元組。

從左至右,遇到分隔符就把分隔符分割成兩部分,返回頭、分隔符、尾三部分的三元組。如果沒找到分隔符,就返回頭,2個空元素的三元組。

Seq必須界定分隔符,必須制定。

5)rpartition(seq)->(head,seq,tail),從右至左,到分隔符就把分隔符分割成兩部分,返回頭、分隔符、尾三部分的三元組。如果沒找到分隔符,就返回頭,2個空元素的三元組。

8、字符串大小寫

1)upper全是大寫。    lower全是小寫。 swapcase()交互式大小寫。if a.lower()='abc':

   

9、字符串排版

title() 標題的每個字母首字母都大寫。

capitalize()首個單詞大寫。

center(width[,fillchar])  ->str    width打印的寬度,,,fillchar填充的字符。

zfill(didth)   width打印寬度,居右。

 

10、字符串修改

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

字符串中查找到匹配替換為新字串,返回新的字符串。

count表示替換幾次,不指定就是全部替換。

2)Strip([chars])->str

把兩頭的符合要求的字符串全部去掉。char作為集合,去掉字符集。

如果char沒有指定字符,那么就去掉兩頭的空白字符。

s='very very very good'.....s.strip(' very')

lstrip([chars]) -> str

 從左開始

 rstrip([chars]) -> str

 從右開始

11、find();

找得到返回的是索引,未找到返回的是-1.

 find(sub[, start[, end]]) -> int    s.find('very')

在指定的區間[start, end),從左至右,查找子串sub。找到返回索引,沒找到返回-1

 rfind(sub[, start[, end]]) -> int

在指定的區間[start, end),從右至左,查找子串sub。找到返回索引,沒找到返回-1

 

12、字符串查找

index(sub[, start[, end]]) -> int

在指定的區間[start, end),從左至右,查找子串sub。找到返回索引,沒找到拋出異常ValueError

 rindex(sub[, start[, end]]) -> int

 在指定的區間[start, end),從左至右,查找子串sub。找到返回索引,沒找到拋出異常ValueError

13、字符串查找

1)時間復雜度,index和count方法都是O(n)。

2)隨着列表數據規模的增大,而效率下降。

3)len(string)返回字符串的長度,即字符串的個數。

14、count(sub[, start[, end]]) -> int

在指定的區間[start, end),從左至右,統計子串sub出現的次數。。。s.count('very')

4)count(sub[])->int.

15、字符串判斷:

endswith(suffix[, start[, end]]) -> bool

在指定的區間[start, end),字符串是否是suffix結尾

startswith(prefix[, start[, end]]) -> bool

在指定的區間[start, end),字符串是否是prefix開頭

16、字符串判斷 is系列

isalnum() -> bool 是否是字母和數字組成    "abc123".isalnum()

isalpha() 是否是字母

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

isdigit() 是否全部數字(0~9)

isidentifier() 是不是字母和下划線開頭,其他都是字母、數字、下划線

islower() 是否都是小寫

isupper() 是否全部大寫

isspace() 是否只包含空白字符       返回的都是bool值。

Sections(有序的)(常見的面試是排序方法是冒泡法)。

17、字符串格式化

字符串格式化是一種拼接字符串輸出樣式的手段,更靈活方便。

1)     join拼接只能使用 分隔符,且要求被拼接的是可迭代的對象。

2)     +拼接字符串比較方便,但是字符串需要先轉換為字符串才能拼接。

printf-style formatting,是來自於c語言風格的print輸出。

3)格式要求:占位符。。使用%和格式字符組成,例如%s,%d。

S調用str,   r調用repr().所有對象都可以被這兩個轉換。‘a’使用ascii。%

占位符中還可以插入修飾字符,例如%03d表示打印3個位置。不夠前面補0.

format % values.格式字符串和被格式化的值之間使用%分隔。

Values只能是一個對象,或者是一個和格式字符串數目相等的元組,或一個字典。

用法:"i am %01s"  %(3,)  

'i like %s.'%'Python'

4)'%3.2f%% , 0x%x, 0X%02X' % (89.7654, 10, 15)   

可以是 元組,可以是字典。

0x    0X只是提示符。

18、字符串格式化

format函數格式。

“{}{***}”。format(args,kwargs)。

Args是位置參數,是一個元組。

Kwargs關鍵字參數,是一個個字典。   {}花括號代表占位符。{{}}表示打印花括號。

{}表示按照順序匹配位置參數,{n}標示取位置參數索引為n的值。

{****}表示在關鍵字參數中搜索名稱一致的。

19、字符串格式化

p 位置參數

"{}:{}".format('192.168.1.100',8888),這就是按照位置順序用位置參數替換前面的格式字符串的占位符中

p 關鍵字參數或命名參數

"{server} {1}:{0}".format(8888, '192.168.1.100', server='Web Server Info : ') ,位置參數按照序號匹配,

關鍵字參數按照名詞匹配

p 訪問元素

"{0[0]}.{0[1]}".format(('magedu','com'))

p 對象屬性訪問

from collections import namedtuple

Point = namedtuple('Point','x y')

p = Point(4,5)

"{{{0.x},{0.y}}}".format(p)

2)     "{:^10x}".format(97)居中對齊。'{0}*{1}={2:<2}'.format(3,2,2*3)

3)     進制。"int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)

 

41    1

61    a  97

 

權重。

顯示時間的。

 

有效數字。。()

20、bytes、bytearray

字符串是字符組成的有序序列,字符可以使用編碼來理解。

1)bytes是不可變的字節,是字節組成的有序的不可變序列。

2)bytearray 是可變的字節,是字節組成的有序的可變序列。

3)編碼與解碼

字符串按照不同的字符集編碼encode返回字節序列bytes。

encode(encoding=’utf-8’ ,errors=’strict’)->bytes 

b'abcdef'.replace(b'f',b'k')

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

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

4)     bytes定義

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

Bytes(iterable_of_ints)->[0,255]的internet組成的可迭代的對象。

Bytes(string,encoding[,errors])->bytes等價於string。Encode()

Bytes(bytes_or_buffer)->immutable cpoy of bytes_or_buffer從一個字節序列或者buffer復制出一個新的不可變的bytes對象。

使用b前綴定義:

只允許基本ASCII使用字符形式b’abc9’

使用16進制表示b“、x41、x61”

 

5)ASCII表。ASCII(American StandardCode for InformationInterchange,美國信息交換

標准代碼)是基於拉丁字母的一套單字節編碼系統

6)     bytes操作

和str類型類似,都是不可變類型,所以方法都一樣,只不過bytes輸入是bytes,輸出也是bytes。

類方法bytes。Formhex(string)

String必須是2個字符的16進制的形式,bytes.fromhex('6161 09 6a 6b00')

Hex()返回十六進制的字符串。

'abc'.encode().hex()

索引 b‘abcdef’[2]

7)         bytearray定義

定義:bytearray()空的bytearray

Bytearray(int)指的是字節的bytearray,被0填充。

Bytearray(iterable_of_ints)->bytearray[0,255]的int組成的可迭代對象。

Bytearray(string,encoding[,errors])->bytearry近似string。Encode()不過返回可變對象,

Bytearray(bytes_or_buffer)從一個字節序列或者buffer復制出一個新的改變的對象。

B前綴的定義的類型是bytes類型。

8)         byearray操作

和bytes類型方法相同。

Bytearray(b’abcdef’).replace(b’f’,b’k’)

Bytearray(b’abc’).find(b’b’)

類方法bytearray.formhex(string)

String必須是2個字符的16進制的形式。

Bytearray。Formhex(‘6162 09 60 6b00’)

hex()

返回16進制表示的字符串。

Bytearray(‘abc’.enconde())。Hex()

索引

Bytearray(b’abcdef’)[2]返回該字節對應的數,int類型。

9)         bytearray操作。

Append(int)尾部追加一個元素。

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

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

Pop(index=-1)在指定索引上移除元素,默認從尾部移除。

Remove(value)找到第一個value移除,找不到拋出異常。

Clear()清空

Reverse()翻轉bytearray,就地修改。

10)提到字符串就得有編碼的概念。

11)字節

12)字節0-255之間。

13)可以索引的數據結構,列表,tuple   str   bytearray.

21、切片

1)線性結構。  

可迭代。。。for。。。In。。  

len()可以獲取長度。

通過下標可以訪問。可以切片。

2)學過的線性結構:

列表、元組、字符串、bytes  bytearray.

3)切片:

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

Sequnence[start:stop]表示返回[start,stop]區間的字序列。

支持負索引。

Start為0,可以省略

Stop為末尾,可以省略。

超過上界(右邊界),就取到末尾;超過下界(左邊界),取到開頭。

Start一定要在stop的左邊。

[:]...表示從頭至尾,全部元素被取出,等效於copy()方法。

生產新的拷貝。

 

練習方法:'www.magedu.com'[:10]   ----'www.magedu'
bytearray(b'www.magedu.com')[-4:10]     ---  bytearray(b'')
'www.magedu.com'[:]  -------'www.magedu.com'
tuple('www.magedu.com')[-10:10]  -------('m', 'a', 'g', 'e', 'd', 'u')
list('www.magedu.com')[-10:-4] -------  ['m', 'a', 'g', 'e', 'd', 'u']

4)     切片

步長切片

[start:stop:step]

Step為步長,可以正負整數,默認是1;

Step要和start;stop同向,否則返回空序列。

練的例題:'www.magedu.com'[4:10:2]

            'mgd'
 
list('www.magedu.com')[-4:-10:-2]
['.', 'd', 'g']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM