1. 程式人生 > >python基礎教程_學習筆記5:字串

python基礎教程_學習筆記5:字串

字串

基本字串操作

字串也是序列,因此序列的基本操作(索引、分片、連線、乘法、長度、求最大值和最小值、成員資格)對字元串同樣適用:

索引

>>> 'a_string'[0]

'a'

長度

>>> len('a_string')

8

求最大值

>>> max('a_string')

't'

求最小值

>>> min('a_string')

'_'

乘法

>>> 'a_string'*2

'a_stringa_string'

連線

>>> 'a_string'+'another_string'

'a_stringanother_string'

分片

>>> 'a_string'[2:6]

'stri'

>>> 'a_string'[1:7:3]

'_r'

賦值

>>> 'a_string'[3]='b'

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'str' object does not support item assignment

因為字串是不可修改的,因此,賦值操作對字串不可用。

字串格式化

字串格式化使用字串格式化操作符,即百分號%來實現。

%的左側放置一個字串(格式化字串),而右側則放置希望格式化的值。可以使用一個值,如一個字串或者數字:

>>> print "Hello,%s!" %'signjing'

Hello,signjing!

>>> age=20

>>> print "I'm %d years old!" %age

I'm 20 years old!

也可以使用多個值的元組或者字典。一般情況下使用元組:

>>> format="Hello,%s,%s enough for ya?"

>>> values=('world','Hot')

>>> print format % values

Hello,world,Hot enough for ya?

如果使用列表或者其他序列代替元組,序列會被解釋為一個值。只有元組和字典可以格式化一個以上的值。

格式化字串的%s部分稱為轉換說明符,它們標記了需要插入轉換值的位置。s表示值會被格式化為字串——如果不是字串,則會用str將其轉換為字串。這個方法對大多數值都有效。

如果要在格式化字串裡面包括百分號,那麼必須使用%%,指引python就不會將百分號誤認為是轉換說明符了。

>>> print "%s %s" %'test'

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: not enough arguments for format string

>>> print "%s %%s" %'test'

test %s

>>> print "%%s %s" %'test'

%s test

如果要格式化實數(浮點數),可以使用f說明符型別,同時提供所需要的精度:一個句點再加上希望保留的小數位數。因為格式化說明符總是以表示型別的字元結束,所以精度應該放在型別字元前面:

>>> print "PI is %.2f" %3.1415926

PI is 3.14

格式化操作符的右運算元可以是任何東西,如果是元組或者對映型別(如字典),那麼字串格式化將會有所不同。

如果右運算元是元組的話,其中的每一個元素都會被單獨格式化,每個值都需要一個對應的轉換說明符。如果需要轉換的元組作為轉換表示式的一部分存在,那麼必須將它用圓括號括起來,以免出錯:

正確

>>> '%s plus %s is %s' %(12,3,4)

'12 plus 3 is 4'

錯誤

>>> '%s plus %s is %s' %12,%3,%4

  File "<stdin>", line 1

    '%s plus %s is %s' %12,%3,%4

                           ^

SyntaxError: invalid syntax

>>> '%s plus %s is %s' %12 %3 %4

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: not enough arguments for format string

>>> '%s plus %s is %s' %12 %3 %4

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: not enough arguments for format string

基本的轉換說明符

基本的轉換說明符(不包括對映鍵的說明符)包括如下[這些項的順序是至關重要的]

%[轉換標誌][最小欄位寬度][.精度值]轉換型別

%字元

標記轉換說明符的開始

轉換標誌(可選)

-表示左對齊;

+表示在轉換值之前要加上正負號;

””(空白字元)表示正數之前保留空格;

0表示轉換值若位數不夠則用0填充;

最小欄位寬度(可選)

轉換後的字串至少應該具有該值指定的寬度。

如果是*,則寬度會從值元組中讀出。

(.)後跟精度值(可選)

如果轉換的是實數,精度值就表示出現在小數點後的位數。

如果轉換的是字串,那麼該數字就表示最大欄位寬度。

如果是*,那麼精度將會從元組中讀出。

轉換型別:見下表;

字串格式化轉換型別

轉換型別 含義

d,i 帶符號的十進位制整數

o 不帶符號的八進位制

u 不帶符號的十進位制

x 不帶符號的十六進位制(小寫)

X 不帶符號的十六進位制(大寫)

e 科學計數法表示的浮點數(小寫)

E 科學計數法表示的浮點數(大寫)

f,F 十進位制浮點數

g 如果指數大於-4或者小於精度值則和e相同,其它情況與f相同

G 如果指數大於-4或者小於精度值則和E相同,其它情況與F相同

c 單字元(接受整數或者單字元字串)

r 字串(使用repr轉換任意python物件)

s 字串(使用str轉換任意python物件)

簡單轉換

帶符號的十進位制整數

>>> "Price is $%d" %42

'Price is $42'

>>> "Price is $%i" %42

'Price is $42'

不帶符號的八進位制

>>> "number is %o" %42

'number is 52'

不帶符號的十進位制

>>> "number is %u" %100

'number is 100'

不帶符號的十六進位制(大寫)

>>> 'number is %X' %155

'number is 9B'

不帶符號的十六進位制(小寫)

>>> 'number is %x' %155

'number is 9b'

科學計數法表示的浮點數(小寫)

>>> 'number is %e' %155

'number is 1.550000e+02'

科學計數法表示的浮點數(大寫)

>>> 'number is %E' %155

'number is 1.550000E+02'

十進位制浮點數

>>> 'number is %f' %155

'number is 155.000000'

>>> 'number is %F' %155

'number is 155.000000'

如果指數大於-4或者小於精度值則和E相同,其它情況與F相同

>>> 'number is %G' %0.000000126

'number is 1.26E-07'

>>> 'number is %g' %0.000000126

'number is 1.26e-07'

>>> 'number is %G' %126

'number is 126'

>>> 'number is %g' %126

'number is 126'

>>> 'number is %g' %1260000000000

'number is 1.26e+12'

>>> 'number is %G' %1260000000000

'number is 1.26E+12'

單字元(接受整數(0~255)或者單字元字串)

>>> 'number is %c' %123

'number is {'

>>> 'number is %c' %'b'

'number is b'

>>> 'number is %c' %255

'number is \xff'

>>> 'number is %c' %256

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

OverflowError: unsigned byte integer is greater than maximum

>>> 'number is %c' %0

'number is \x00'

>>> 'number is %c' %-1

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

OverflowError: unsigned byte integer is less than minimum

字串(使用str轉換任意python物件)

>>> 'Using str:%s' %12L

'Using str:12'

字串(使用repr轉換任意python物件)

>>> 'Using repr:%r' %12L

'Using repr:12L'

欄位寬度和精度

轉換說明符可以包括字元寬度和精度。

字元寬度:

是轉換後的值所保留的最小字元個數,

精度:

(對於數字來說)則是結果中應該包含的小數位數;

(對於字串轉換來說)是轉換後的值所包含的最大字元個數;

這兩個引數都是整數(首先是字元寬度,然後是精度),通過點號(.)分隔。雖然兩個都是可選的引數,但如果只給出精度,就必須包含點號

>>> from math import pi

>>> '%10f' %pi

'  3.141593'

>>> '%10.2f' %pi

'      3.14'

>>> '%.2f' %pi

'3.14'

>>> '%.5s' % 'Signjing'

'Signj'

可以使用*(星號)作為欄位寬度或者精度(或者兩者都使用*),此時數值會從元組引數中讀出:

>>> '%.*s' % (5,"signjing")

'signj'

>>> '%.*s' % (7,"signjing")

'signjin'

符號、對齊和0填充

在欄位寬度和精度值之前還可以放置一個“標表”,該標表可以是零、加號、減號或空格。零表示數字將會用0進行填充。

>>> '%10.2f' %pi

'      3.14'

>>> '%010.2f' %pi

'0000003.14'

>>> '%+010.2f' %pi

'+000003.14'

>>> '%-010.2f' %pi

'3.14      '

>>> '% 10.2f' %pi

'      3.14'

注意:

010中開頭的那個0並不意味著欄位寬度說明符為八進位制,它只是個普通的python數值。

當使用010作為字元寬度說明符的時候,表示欄位寬度為10,並且用0進行填充空位,而不是說欄位寬度為8

>>> 010

8

減號(-)用來左對齊數值:

空白(“”)意味著在正數前加上空格,這在需要對齊正負數時會很用。

>>> '% .2f' %pi

' 3.14'

>>> '% .2f' %-pi

'-3.14'

加號(+),表示不管是正數還是負數都標示出符號(同樣是在對齊時很有用):

>>> print ('%+5d' %10)+'\n'+('%+5d' % -10)

  +10

  -10

字串方法

字串方法太多,此處只列舉幾個比較有用的。

find

find方法可以在一個較長的字串中查詢子字串,返回子串所在位置的最左端索引,如果沒有找到則返回-1(與列表或元組的index方法找不到時則返回錯誤)。

>>> 'I\'m a sunny boy'.find('sun')

6

>>> 'I\'m a sunny boy'.find('sunb')

-1

find方法還可以接受可選的起始點和結束點引數:

只提供起始點:

>>> 'I\'m a sunny boy'.find('sun',5)

6

>>> 'I\'m a sunny boy'.find('sun',9)

-1

提供起始點和結束點

>>> 'I\'m a sunny boy'.find('sun',5,7)

-1

>>> 'I\'m a sunny boy'.find('sun',5,9)

6

記住,就像列表的分片操作一樣,find方法的第2和第3個引數,包含第二個引數的索引值,但不包括第3個引數的索引值,這是python中的一個慣例。

>>> 'I\'m a sunny boy'.find('sun',6,9)

6

>>> 'I\'m a sunny boy'.find('sun',6,8)

-1

join(非常重要)

join方法是非常重要的字串方法,它是split方法的逆方法,用來在佇列中新增元素:

>>> seq=[1,2,3,4,5]

>>> sep='+'

>>> sep.join(seq)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: sequence item 0: expected string, int found

>>> seq=['1','2','3','4','5']

>>> sep='+'

>>> sep.join(seq)

'1+2+3+4+5'

可見,需要新增的佇列元素都必須是字串

lower

lower方法返回字串的小寫字母版:

>>> "Signjing".lower()

'signjing'

>>> "signjing".lower()

'signjing'

如果想編寫“不區分大小寫”的程式碼的話,該方法就派上用場了。

replace

replace方法返回某字串的所有匹配項均被替換之後得到字串。

>>> "Signjing".replace("Si","fin")

'fingnjing'

>>> "This is a test".replace("is","eez")

'Theez eez a test'

split(非常重要)

它是join的逆方法,用來將字串分割為序列。

>>> 'id,index,name,info'.split(',')

['id', 'index', 'name', 'info']

如果不提供任何分隔符,程式會把所有空格作為分割符(空格、製表、換行等)。

>>> 'id index name info'.split()

['id', 'index', 'name', 'info']

>>> 'id index   name    info'.split()

['id', 'index', 'name', 'info']

strip

strip方法返回去除兩側(不包括內部)空格的字串:

>>> " space space    ".strip()

'space space'

strip方法和lower方法一起使用可以很方便地對比輸入的和儲存的值。

也可以指定需要去除的字元:

>>> 'space space'.strip('e')

'space spac'

>>> 'space space'.strip('se')

'pace spac'

translate

translate方法和replace方法一樣,可以替換字串中的某些部分,但和後者不同的是,translate方法只處理單個字元。它的優勢在於可以同時進行多個替換,有些時候比replace效率高得多。

在使用translate轉換之前,需要先完成一張轉換表。轉換表中是以字元替換某字元的對應關係。因為這個表(事實上是字串)有多達256個專案,可以直接使用string模組裡面的maketrans函式。

maketrans函式接受兩個引數:兩個等長的字串,表示第一個字串中的每個字元都用第二個字串中相同位置的字元替換。

>>> from string import maketrans

>>> table=maketrans('cs','kz')

>>> len(table)

256

>>> table

'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>[email protected][\\]^_`abkdefghijklmnopqrztuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'

>>> table[97:123]

'abkdefghijklmnopqrztuvwxyz'

>>> maketrans('','')[97:123]

'abcdefghijklmnopqrstuvwxyz'

>>> maketrans('cs','kz')[97:123]

'abkdefghijklmnopqrztuvwxyz'

建立這個表後,可以用作translate方法的引數,進行字串的轉換如下:

>>> 'this is an incredible test'.translate(table)

'thiz iz an inkredible tezt'

第二個引數可選,用來指定需要刪除的字元:

>>> 'this is an incredible test'.translate(table,' ')

'thizizaninkredibletezt'

>>> 'this is an incredible test'.translate(table,'thi')

'z z an nkredble ez'

相關推薦

python基礎教程_學習筆記5字串

字串 基本字串操作 字串也是序列,因此序列的基本操作(索引、分片、連線、乘法、長度、求最大值和最小值、成員資格)對字元串同樣適用: 索引 >>> 'a_string'[0] 'a' 長度 >>> len('a_string') 8 求最大

python基礎教程_學習筆記18標準庫一些最愛——shelve

變量綁定 工作 關閉 mes 名稱 tis 標準 times data- 版權聲明:本文為博主原創文章,未經博主同意不得轉載。 https://blog.csdn.net/signjing/article/details/3602998

python基礎教程_學習筆記16標準庫一些最愛——random

標準庫:一些最愛 random random模組包括返回隨機數的函式,可以用於模擬或者用於任何產生隨機輸出的程式。 事實上,所產生的數字都是偽隨機數,它們以一個可預測的系統作為基礎,除非是為了強加密的目標,否則這些隨機數還是足夠隨機的。如果真的需要隨機性,可以使用os模組的

python基礎教程_學習筆記2序列-2

序列-2 通用序列操作 序列相加 通過加號對列表進行連線操作; 列表 >>> [1,3,4]+[2,5,8] [1, 3, 4, 2, 5, 8] 字串 >>> '134'+'258' '134258' 元組 >>> (

python基礎教程_學習筆記9抽象

ror ssi main ria lob ram 以及 line hang 版權聲明:本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/signjin

python學習筆記5列表-元組-集合-字典

list列表 一組有順序的資料的組合,可進行增刪改查 賦值操作 ls = list() ,ls = [] 下標從0開始,最後一個數可使用-1訪問,依次類推 可使用其切片操作[:],反序排列[::-1] 進行切片和copy()後的新list的ID原id不一致

.Net基礎_學習筆記_第四天_關系運算符和邏輯運算符

不能 main 運算 ram true con 是否 names 關系 1.關系運算符 包含:> < <= >= == != 以及bool類型中的true和false。 2.邏輯運算符 與 &

Python基礎教程》第三章使用字符串

方法的參數 基礎 指定 方法 添加 repl pre replace this find方法可以在一個較長的字符串中查找子字符串。它返回子串所在位置的最左端索引。如果沒有找到則返回-1 join方法用來在隊列中添加元素,需要添加的隊列元素都必須是字符串 >>

Python基礎教程學習的第三課0121

類比 方法 found 介紹 匹配 this 註釋 style hello 今天學習python第三課,使用字符串。(所有標準的序列操作【索引、分片、乘法、判斷成員資格、求長度、取最小與最大值】對字符串同樣適用) 1.%(轉換說明符)的用法,%標記了需要插入轉換值的位置。

Python基礎教程學習的第四課0121

補充 需要 log python mes post mit key tom 字典的使用 >>> #字典>>> names=[‘alice‘,‘beth‘,‘cecil‘,‘dee-dee‘,‘earl‘]>>> numb

Python基礎教程學習的第五課0121

print輸出 valid 16px objects ack shell python erro port 學習條件、循環和其他語句之前,學些基本的操作。 1.print輸出逗號 >>> #print 與 import的更多信息>>> #

hibernate框架學習筆記5緩存

很好 close nts oid img 關閉資源 次方 兩個 res 緩存不止存在與程序中,電腦硬件乃至於生活中都存在緩存 目的:提高效率 比如IO流讀寫字節,如果沒有緩存,讀一字節寫一字節,效率低下 hibernate中的一級緩存:提高操作數據庫的效率 示例:

struts2框架學習筆記5OGNL表達式

closed 在一起 放置 nbsp lap src list 對象 pan OGNL取值範圍分兩部分,root、Context兩部分 可以放置任何對象作為ROOT,CONTEXT中必須是Map鍵值對 示例: 準備工作: public void fun1() th

Kali學習筆記5TCPDUMP詳細使用方法

CA 自己 ring int 十六 一行 全部 kali info Kali自帶Wireshark,但一般的Linux系統是不帶的,需要自行下載,並且過程略復雜 而純字符界面的Linux系統無法使用Wireshark 但是,所有Linux系統都會安裝TCPDUMP:一種基於

Python基礎編程 學習筆記

string 自動 enume 調用 列表 strings dex rate 方法 在循環列表的同時記住列表的序列的一種方法 # 調用enumerate函數,這個函數可以叠代出索引-值對,其中索引是自動提供的 for index, string in enumerate

python基礎(自主學習筆記

持續更新如果字符內既包含‘又包含"可以用轉義字符 \ 來標識\n 表示換行,\t 表示制表符, 用 \ \ 表示字符 \ ,可以用 r" 表示 “內部的字符串默認不轉義” ,當字符串內部存在很多換行時,用‘‘‘...‘‘‘的格式來換行跟 \n 的用法一樣,方便閱讀。用 True、False

Dubbo學習筆記5Dubbo整體框架分析

什麽 資源 AD 文本文件 font ren factor exporter 服務提供者 Dubbo的分層架構 本文將簡單介紹Dubbo的分層架構設計,如下圖是Dubbo官方的整體架構圖: Dubbo官方提供的該架構圖很復雜,一開始我們沒必要深入細節,下面我們簡單介紹

python簡明教程學習筆記

1.       由於我們正在討論格式問題,就要注意 print 總是會以一個不可見的“新一行”字元( \n )結尾,因此重複呼叫 print 將會在相互獨立的一行中分別列印。為防止列印過程中出現這一 換行符,你可以通過 end

Less學習筆記5匹配模式

匹配模式:類似於JS中的if語句,但不完全是,滿足一定條件後才能匹配 比如:用CSS去畫一個三角 <div class='triangle'></div> .triangle{     width: 0;    &

Deep Learning 學習筆記5神經網路彙總

本篇文章整理自FJODOR VAN VEEN的論文:The Neural Network Zoo。本文介紹了神經網路大家族,但不是所有的神經網路都能涵蓋,畢竟新的網路結構在不斷被髮展出來。以下是神經網路的圖譜。 介紹神經網路之前,先介紹神經元的分類,這部分內容來自博友的