字串是程式中最常用的一種資料型別,字串可以包含中文與英文等任何字元,在記憶體中用 unicode 編碼儲存,但是儲存到磁碟中時候往往採用 gbk 或者 utf-8 等別的編碼形式。
1、字串型別
字元陣列可以用來儲存字串,字串在記憶體中的存放形式也就是字元陣列的形式,字串可以看成是字元的陣列,例如:
s=「hello」
其記憶體分布如圖:
1> 獲取字串長度函式 len
字串s 的長度為len (s)
,例如
len("abc") #3
len("我們abc ") #5
len("") # 空字串s 是連續兩個引號,中間沒有任何東西,空串的長度為 0
len(" ") # 空格字串,長度是1
2> 讀取字串各個字元
要得到字串中第i 個字元,可以像陣列訪問陣列元素那樣用 s[i] 得到,其中 s[0]是第 1個字元, s[1] 是第 2 個字元,……, s[len(s)-1] 是最後乙個字元。例如:
s="abcde"
n=len(s)
for i in range(n):
print(s[i])
注意字串中的字元是不可以改變的,因此不能對某個字元s[i]賦值,例如 s[0]=「h」
是錯誤的。
3> 字元在記憶體中的編碼
計算機只認識二進位制,字元在計算機中實際上是用二進位制數儲存的,這個編碼稱為
unicde編碼
,每個英文本元用兩個位元組儲存。要知道某個字元的編碼,用函式 ord 字元
便知道了,例如:
s="hi 我是大富"
n=len(s)
# print(n)
for i in range(n):
print(s[i],ord(s[i]))
執行結果如下:
h 104
i 105
32我 25105
是 26159
大 22823
富 23500
下面用程式測試a-z a-z 0-9的unicode編碼:
# 用程式測試 a-z a-z 0-9 的 unicode編碼
s='abcdefghijklmnopqrstuvmxyz'
s='abcdefghijklmnopqrstuvwxyz'
sn='0123456789'
n=len(s)
for i in range(n):
print(s[i],ord(s[i]))
n=len(s)
for i in range(n):
print(s[i],ord(s[i]))
n=len(sn)
for i in range(n):
print(sn[i],ord(sn[i]))
執行結果如下:
a 65
b 66
c 67
d 68
e 69
f 70
g 71
h 72
i 73
j 74
k 75
l 76
m 77
n 78
o 79
p 80
q 81
r 82
s 83
t 84
u 85
v 86
m 77
x 88
y 89
z 90
a 97
b 98
c 99
d 100
e 101
f 102
g 103
h 104
i 105
j 106
k 107
l 108
m 109
n 110
o 111
p 112
q 113
r 114
s 115
t 116
u 117
v 118
w 119
x 120
y 121
z 122
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
漢字的編碼也用兩個位元組才能表示,unicode 碼包含所有的符號。它表示英文本元時有乙個位元組是 0 ,這樣表示雖然浪費乙個位元組,但是它把所有的符號都統一成一樣的長度。
4> 編碼轉為字元
乙個符號的編碼為n ,用 chr(n) 函式把它轉為乙個符號,例如:
print(chr(97))
print(chr(65))
print(chr(25105))
結果如下:
a
a我
5> 字串大小比較
兩個字串a b 可以比較大小,比較規則是按各個對應字元的 unicode 編碼,編碼大的乙個為大:
比較a[0]與 b[0],如果 a[0]> b[0]則 a> b ,如果 a[0] b[1] 則 a >b ,如果 a[1] len(b) 則 a> b ,如果 len(a)< len(b)則 a< b 。
如果自己寫乙個比較函式compare(a,b) 比較 a b 大小,如果 a >b 返回 1 ,如果 a
def compare(a,b):
m=len(a)
n=len(b)
k=m # 獲取較小的長度,拿k的長度比較
if m>n:
k=n# 注意比較沒有等號
for i in range(k):
if a[i]>b[i]:
return 1
elif a[i]n:
return 1
else:
return -1
print(compare("0101a","0101b") )
在實際應用中我們可以簡單使用》 、>= 、< 、<= 、==等符號來判斷兩個字串的大小。根據字元的編碼有下列關係:
0<1
特別注意大寫的字母比小寫的小!
字串(一) 字串Hash
今天開一手最不 tao 擅 yan 長的字串演算法 字串hash演算法。似乎提到字串的話,kmp應該是更為常見的一種,但是hash有它的優點,被犇們稱為 優雅的暴力 何謂hash?hash的中文稱為雜湊,這當然是音譯,直譯過來就是雜湊,或者也有叫預對映的。雜湊的作用就是通過某個特殊函式的對映,將任意...
Python 一 字串常用操作
python的字串不可改變 可以像對陣列操作一樣訪問字串的部分內容 s 123 獲取全部內容s 123 獲取從某一下標到結尾的全部內容s 1 23 獲取從開頭到某一下標之前的全部內容s 2 12 獲取乙個左閉右開區間的內容s 1 2 2 再來乙個冒號表示步長s 0 3 2 13 負數代表倒數第n個元...
python學習筆記(一) 字串
字串是python中最常用的資料型別。我們可以使用引號 或 來建立字串。建立字串很簡單,只要為變數分配乙個值即可。例如 var1 hello var2 world python不支援單字元型別,單字元在python中也作為乙個字串使用。python訪問子字串,可以使用方括號來擷取字串,例如 通過索引...