第三章 字符串

第三章 字符串%

字符串是不可變的,所有的元素賦值和切片賦值都是非法的
Python提供了多種字符串格式設置方法

yanyu = "hello, %s I like %s age is %s"
beyond = ("beyond","band",23)
yanyu % beyond#結果為:'hello, beyond I like band age is 23'a = "age is %.3f and name is %.2f"
b = (23,14)
a % b#結果為:'age is 23.000 and name is 14.00'
'''
很顯然,最后的%s對應的是數,但最后也會轉換成字符
如果指定的值不是字符串,將使用str將其轉換為字符串
beyond為值,需要插入到yanyu里面,yanyu % beyond位置不可以改變!!!
%.3f將值的格式設置為包含3位小數的浮點數
'''
from string import Template 
tmpl = Template("Hello, $who! $what enough for ya?") 
tmpl.substitute(who="yanyu", what="beyond") #結果為:'Hello, yanyu! beyond enough for ya?'

編寫新代碼時,應選擇使用字符串方法format,使用這種方法時,每個替換字段都用花括號括起

"{},{},and {}".format("apple","water","milk")#結果為:'apple,water,and milk'
"{0},{1},and {2}".format("aaa","bbb","ccc")#結果為:'aaa,bbb,and ccc'
"{0} {3} {1} {2}".format("a","b","c","d")#結果為:'a d b c'

格式說明符 .2f,并使用冒號:將其與字段名隔開,意味著要使用包含2位小數的浮點數格式;若沒有指定,則輸出多位

from math import pi
"{name} is  {value}.".format(value=pi, name="π")#結果為:'π is  3.141592653589793.'
"{name} is  {value:.2f}.".format(value=pi, name="π")#結果為:'π is  3.14.'
from math import e 
f"Euler's constant is roughly {e}." 
"Euler's constant is roughly {e}.".format(e=e)'''
上述倆結果均一樣:
"Euler's constant is roughly 2.718281828459045."
'''

要在最終結果中包含花括號,可在格式字符串中使用兩個花括號(即{{或}})來指定

"{{ceci n'est pas une replacement field}}".format()#結果為:"{ceci n'est pas une replacement field}"

每個值都被插入字符串中,以替換用花括號括起的替換字段
替換字段由字段名轉換標志格式說明符組成其中每個部分都是可選的

替換字段名

"{foo} {} {bar} {}".format(1, 2, bar=4, foo=3)#結果為:'3 1 4 2'
"{foo} {1} {bar} {0}".format(1, 2, bar=4, foo=3)#結果為:'3 2 4 1'
name = ["huangjiaju","yanyu","yeshirong"]
"{band[1]} like the {band[0]} and {band[2]}".format(band=name)#結果為:'yanyu like the huangjiaju and yeshirong'
import math
temp1 = "The {mod.__name__} value is {mod.pi:.2f} for Π"
temp1.format(mod=math)#結果為:'The math value is 3.141592653589793 for Π'#變量__name__包含指定模塊的名稱temp2 = "The {mod.__name__} value is {mod.pi:.2f} for Π"
temp2.format(mod=math)#結果為:'The math value is 3.14 for Π'

1,基本轉換

三個標志(s、r和a)指定分別使用str、repr和ascii進行轉換
函數str通常創建外觀普通的字符串版本(這里沒有對輸入字符串做任何處理)
函數repr嘗試創建給定值的Python表示(這里是一個字符串字面量)
函數ascii創建只包含ASCII字符的表示,類似于Python 2中的repr

print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
#結果為:π 'π' '\u03c0'

這里的f和b之類的表示類型說明符,具體的參考下表所述

"The number is {num}".format(num=42) #結果為:'The number is 42' 
"The number is {num:f}".format(num=42) #結果為:'The number is 42.000000'
"The number is {num:.2f}".format(num=42) #結果為:'The number is 42.00'
"The number is {num:b}".format(num=42) #結果為:'The number is 101010'
類型含 義
b將整數表示為二進制數
c將整數解讀為Unicode碼點
d將整數視為十進制數進行處理,這是整數默認使用的說明符
e使用科學表示法來表示小數(用e來表示指數)
E與e相同,但使用E來表示指數
f將小數表示為定點數
F與f相同,但對于特殊值(nan和inf),使用大寫表示
g自動在定點表示法和科學表示法之間做出選擇。這是默認用于小數的說明符,但在默認情況下至少有1位小數
G與g相同,但使用大寫來表示指數和特殊值
n與g相同,但插入隨區域而異的數字分隔符
o將整數表示為八進制數
s保持字符串的格式不變,這是默認用于字符串的說明符
x將整數表示為十六進制數并使用小寫字母
X與x相同,但使用大寫字母
%將數表示為百分比值(乘以100,按說明符f設置格式,再在后面加上%)

2,寬度、精度和千位分隔符

設置浮點數(或其他更具體的小數類型)的格式時,默認在小數點后面顯示6位小數,并根據需要設置字段的寬度,而不進行任何形式的填充
字符串和數的默認對齊方式不同
數是默認右對齊;而字符串是默認左對齊

"{beyond:10}".format(beyond=2)  #結果為:'         2'
"{name:10}".format(name="yanyu")#結果為:'yanyu     '
'{:010.2f}'.format(pi)#結果為:'0000003.14'
# 010表示整體包括小數點共占十位且不足的話用0補齊,.2f表示小數點后2為小數,f為浮點數"PI day is {P:.2f}".format(P=pi)#結果為:'PI day is 3.14'
"{PI:10.2f}".format(PI=pi)      #結果為:'      3.14'
"{:.5}".format("a ha haha")     #結果為:'a ha '
"10 de yibaicifang is {:,}".format(10 ** 100)#結果為:'10 de yibaicifang is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000'  千位分隔符

3,符號、對齊和用 0 填充

要指定左對齊、右對齊和居中,可分別使用<>^

print("{0:<10.2f}\n {0:^10.2f}\n {0:>10.2f}\n".format(pi))
'''
3.143.143.14
'''

填充字符來擴充對齊說明符,這樣將使用指定的字符而不是默認的空格來填充

"{:$^25}".format(" beyond yanyu ")#結果為:'$$$$$ beyond yanyu $$$$$$'

具體的說明符 = ,它指定將填充字符放在符號和數字之間

print('{0:10.2f}\n{1:10.2f}'.format(pi, -pi))
'''3.14-3.14
'''
print('{0:10.2f}\n{1:=10.2f}'.format(pi, -pi))
'''3.14
-     3.14
'''print('{0:+.2}\n{1:+.2}'.format(pi, -pi))
’‘’
+3.1
-3.1
‘’‘
print('{0:-.2}\n{1:-.2}'.format(pi, -pi)) #默認設置'''3.1
-3.1
#若{0}為pi是正數的話,{0:-.2}無法在pi前面添負號,最后的結果取決于format里面數的正負值'''
print('{0: .2}\n{1: .2}'.format(pi, -pi))
'''3.1
-3.1
'''

井號(#)選項,你可將其放在符號說明符和寬度之間
這個選項將觸發另一種轉換方式,轉換細節隨類型而異
對于二進制、八進制和十六進制轉換,將加上一個前綴

"{:b}".format(42)#結果為:'101010'
"{:#b}".format(42)#結果為:'0b101010'"{:g}".format(42)#結果為:'42'
"{:#g}".format(42)#結果為:'42.0000'

字符串方法

雖然字符串方法完全蓋住了模塊string的風頭,下面是模塊string中幾個很有用的常量

常量名稱作用
string.digits包含數字0~9的字符串
string.ascii_letters包含所有ASCII字母(大寫和小寫)的字符串
string.ascii_lowercase包含所有小寫ASCII字母的字符串
string.printable包含所有可打印的ASCII字符的字符串
string.punctuation包含所有ASCII標點字符的字符串
string.ascii_uppercase包含所有大寫ASCII字母的字符串

雖然說的是ASCII字符,但值實際上是未解碼的Unicode字符串

1,center,通過在兩邊添加填充字符(默認為空格)讓字符串居中

"字符串".center(num,"占位符")#表示:將字符串一共占num個位置,然后在這num個位置居中,占位符填充,若無占位符默認空格填充

"beyond yanyu huangjiaju".center(25)#結果為:' beyond yanyu huangjiaju '
"beyond yanyu huangjiaju".center(25,"$")#結果為:'$beyond yanyu huangjiaju$'

2,find,在字符串中查找子串。如果找到,就返回子串的第一個字符的索引,否則返回-1

字符串方法find返回的并非布爾值
如果find像這樣返回0,就意味著它在索引0處找到了指定的子串

'With a moo-moo here, and a moo-moo there'.find('moo')#結果為:7title = "Monty Python's Flying Circus"
title.find('Monty')#結果為:0
title.find('Python')#結果為:6
title.find('Flying')#結果為:15
title.find('Zirquss')#結果為:-1subject = '$$$ Get rich now!!! $$$'
subject.find('$$$')#結果為:0

指定搜索的起點和終點(它們都是可選的),左閉右開

subject = '$$$ Get rich now!!! $$$'subject.find('$$$')#結果為:0
#只指定了起點
subject.find('$$$', 1)#結果為:20subject.find('!!!')#結果為:16
#同時指定了起點和終點
subject.find('!!!', 0, 16)#結果為:-1

3,join,其作用與split相反,用于合并序列的元素

所合并序列的元素必須都是字符串連接符.join(字符串列表)將字符串列表通過連接符相連,連接符可為空

beyond = [1,9,9,3]
yy =+“
YY = ”“
yy.join(beyond)#結果為:報錯,原因是合并序列只能是字符串
sq = ['1','9','9','9']
yy.join(sq)#結果為:'1+9+9+9'
YY.join(sq)#結果為:'1999'dirs = '', 'usr', 'bin', 'env'
'/'.join(dirs)#結果為:'/usr/bin/env'
print('C:' + '\\'.join(dirs))#結果為:C:\usr\bin\env

4,lower,返回字符串的小寫版本

將所有的用戶名都轉換為小寫,并于搜索指定姓名用戶

name = "beyond"
names = ["yanyu","huangjiaju","yeshirong","beyond","huangguanzhoang","huangjiaqiang"]
if name.lower() in names:print("I found it!")
#結果為:I found it!

一個與lower相關的方法是title,它將字符串轉換為詞首大寫,即所有單詞的首字母都大寫其他字母都小寫
與title功能一樣的是使用模塊string中的函數capwords

"i like beyond band".title()#結果為:'I Like Beyond Band'import string 
string.capwords("i like beyond band")#結果為:'I Like Beyond Band'

5,replace,將指定子串都替換為另一個字符串,并返回替換后的結果

 'This is a test'.replace('is', 'eez')#結果為:'Theez eez a test'

6,split,一個非常重要的字符串方法,其作用與join相反,用于將字符串拆分為序列

如果沒有指定分隔符,將默認在單個或多個連續的空白字符(空格、制表符、換行符
等)處進行拆分

'1+2+3+4+5'.split('+') #結果為”['1', '2', '3', '4', '5'] 
'/usr/bin/env'.split('/') #結果為:['', 'usr', 'bin', 'env'] 
'Using the default'.split() #結果為:['Using', 'the', 'default']

7,strip,將字符串開頭末尾的空白(但不包括中間的空白)刪除,并返回刪除后的結果

' I very like beyond band '.strip()#結果為:'I very like beyond band'

假定用戶輸入用戶名時不小心在末尾加上了一個空格,搜索的時候就可以發揮這個方法的作用了

names = ['gumby', 'smith', 'jones']
name = 'gumby '
if name in names: print('Found it!')#結果為:按下enter 沒反應 因為用戶名稱多了個空格
if name.strip() in names: print('Found it!')#結果為:按下enter Found it!

還可在一個字符串參數中指定要刪除哪些字符

'*!*!###!!!!* SPAM * for * everyone!!! *@*$$$*'.strip(' #*!@$')#結果為:'SPAM * for * everyone'

8,translate,與replace一樣替換字符串的特定部分,但不同的是它只能進行單字符替換

優勢在于能夠同時替換多個字符,因此效率比replace高

假設你要將一段英語文本轉換為帶有德國口音的版本,為此必須將字符c和s分別替換為k和z,使用translate前必須創建一個轉換表table = str.maketrans('cs', 'kz')
創建轉換表后,就可將其用作方法translate的參數
還可提供可選的第三個參數,指定要將哪些字母刪除

table1 = str.maketrans('cs', 'kz')
'this is an incredible test'.translate(table1)#結果為:thiz iz an inkredible tezt'table2 = str.maketrans('cs', 'kz', ' ')
'this is an incredible test'.translate(table2)#結果為:'thizizaninkredibletezt'

9,判斷字符串是否滿足特定的條件

isspaceisdigitisupper,它們判斷字符串是否具有特定的性質
(如包含的字符全為空白數字大寫
如果字符串具備特定的性質,這些方法就返回True,否則返回False

YY = “BEYOND”
yy = "123456qwe"
q = "   "
YY.isupper()#結果為:True
yy.isdigit()#結果為:False
q.isspace()#結果為:True

本章節介紹的新函數

函 數描 述
string.capwords(s[, sep])使用split根據sep拆分s,將每項的首字母大寫,再以空格為分隔符將它們合并起來
ascii(obj)創建指定對象的ASCII表示

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378363.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378363.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378363.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【視覺項目】【day5】8.25號實驗記錄(修完BUG,28張測試圖,13個樣本,四張測試圖誤判,這比之前效果好很多了)

目錄修改完BUG后的程序以及效果優化思路&#xff0c;增強正確識別率&#xff08;待驗證&#xff09;修改完BUG后的程序以及效果 修改代碼后的測試結果&#xff1a;(利用連通域面積將明顯比本張測試圖的瓶子要小的模板提前去除&#xff0c;減少誤判) 這樣下來&#xff0c;28張測…

linux kernel and user space通信機制,Linux內核空間與用戶空間通信機制地研究.doc

實用文案標準文檔Linux內核空間與用戶空間通信機制的研究Linux kernel space and user space communication mechanism摘 要Linux 是一個源碼開放的操作系統&#xff0c;無論是普通用戶還是企業用戶都可以編寫自己的內核代碼&#xff0c;再加上對標準內核的裁剪從而制作出適合自…

前臺用js、jquery出現錯誤很多是由于IE緩存

例如&#xff1a;當你用jquery進行異步請求數據時&#xff0c;如果瀏覽器發現請求的地址不變&#xff0c;或者參數也不改變的情況下 IE默認是取原來的緩存中的數據&#xff0c;而不進行重新請求數 解決的方法是是在地址欄的后面加上一個隨機參數值&#xff0c;IE發現地址改變&a…

python 示例_帶有示例的Python date timetuple()方法

python 示例Python date.timetuple()方法 (Python date.timetuple() Method) date.timetuple() method is used to manipulate objects of date class of module datetime. date.timetuple()方法用于操作模塊datetime的日期類的對象。 It is an instance method which means …

WebC.BBS 項目參與新人必讀

開發環境: 采用Visual Studio 2010&#xff0c;MVC版本采用Asp.Net MVC3&#xff0c;數據庫采用Sql2005 2008,擴展技術包括jQuery。 SVN的相關信息&#xff1a; SVN-Url&#xff1a;svn://svn.cyqdata.com/project_bbs 賬戶申請&#xff1a;請將自己的密碼發給組長&#xff0c;…

第四章 字典

第四章 字典{鍵:值,名字:電話號碼} 映射&#xff1a;通過名稱來訪問其各個值的數據結構 列表&#xff1a;將一系列值組合成數據結構并通過編號來訪問各個值 字典是Python中唯一的內置映射類型&#xff0c;其中的值不按順序排列&#xff0c;而是存儲在鍵下 鍵可能是數、字符串…

利用梯度下降法求解一元線性回歸和多元線性回歸

文章目錄原理以及公式【1】一元線性回歸問題【2】多元線性回歸問題【3】學習率【4】流程分析&#xff08;一元線性回歸&#xff09;【5】流程分析&#xff08;多元線性回歸&#xff09;歸一化原理以及每種歸一化適用的場合一元線性回歸代碼以及可視化結果多元線性回歸代碼以及可…

linux x64 asm 參數傳遞,NASM匯編學習系列(1)——系統調用和參數傳遞

0. 說明本學習系列代碼幾乎完全摘自&#xff1a;asmtutor.com&#xff0c;如果英文可以的(也可以用谷歌瀏覽器翻譯看)&#xff0c;可以直接看asmtutor.com上的教程系統環境搭建&#xff1a;(我用的是ubuntu18.04.4 server&#xff0c;安裝gcc、g)sudo apt install nasmsudo apt…

Javascript之創建對象(原型模式)

我們創建的每個函數都有一個prototype(原型)屬性&#xff0c;這個屬性是一個指針&#xff0c;指向一個對象&#xff0c;它的用途是包含可以有特定類型的所有實例共享的屬性和方法。 prototype就是通過構造函數而創建的那個對象的原型對象。使用原型的好處就是可以讓所有對象實例…

treeset java_Java TreeSet pollLast()方法與示例

treeset javaTreeSet類pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 條件、循環及其他語句

第五章 條件、循環及其他語句 再談print和import print現在實際上是一個函數 1&#xff0c;打印多個參數 用逗號分隔&#xff0c;打印多個表達式 sep自定義分隔符&#xff0c;默認空格 end自定義結束字符串&#xff0c;默認換行 print("beyond",yanyu,23)#結果為…

兩種方法將Android NDK samples中hello-neon改成C++

一、第一種方法&#xff1a;1.修改helloneon.c 中代碼 a.將 char* str; 改為 char str[512] {0}; b.將 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改為 sprintf(str, "FIR Filter benchmark:\nC ve…

【視覺項目】【day6】8.26關于matchTemplate()以及NCC的思考整理

NCC與matchTemplate()函數中match_method TM_CCOEFF_NORMED是否一樣&#xff1f; 先看公式&#xff1a; TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:歸一化的相關性系數匹配方法 NCC:normalized cross correlation:歸一化互相關系數 公式是一樣的。 參考&#xff1a; 模板匹配的幾…

linux待機流程,Linux睡眠喚醒機制--Kernel態

一、對於休眠(suspend)的簡單介紹 在Linux中,休眠主要分三個主要的步驟: 1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下…

strictmath_Java StrictMath log1p()方法與示例

strictmathStrictMath類log1p()方法 (StrictMath Class log1p() method) log1p() method is available in java.lang package. log1p()方法在java.lang包中可用。 log1p() method is used to return (the logarithm of the sum of the given argument and 1 like log(1d) in th…

第六章 抽象

第六章 抽象 自定義函數 要判斷某個對象是否可調用&#xff0c;可使用內置函數callable import math x 1 y math.sqrt callable(x)#結果為&#xff1a;False callable(y)#結果為&#xff1a;True使用def&#xff08;表示定義函數&#xff09;語句&#xff0c;來定義函數 …

HTTP 狀態代碼

如果向您的服務器發出了某項請求要求顯示您網站上的某個網頁&#xff08;例如&#xff0c;當用戶通過瀏覽器訪問您的網頁或在 Googlebot 抓取該網頁時&#xff09;&#xff0c;那么&#xff0c;您的服務器會返回 HTTP 狀態代碼以響應該請求。 此狀態代碼提供了有關請求狀態的信…

TensorFlow的可訓練變量和自動求導機制

文章目錄一些概念、函數、用法TensorFlow實現一元線性回歸TensorFlow實現多元線性回歸一些概念、函數、用法 對象Variable 創建對象Variable&#xff1a; tf.Variable(initial_value,dtype)利用這個方法&#xff0c;默認整數為int32&#xff0c;浮點數為float32&#xff0c;…

linux samba安裝失敗,用aptitude安裝samba失敗

版本&#xff1a;You are using Ubuntu 10.04 LTS- the Lucid Lynx - released in April 2010 and supported until April 2013.root下執行aptitude install sambaReading package lists... DoneBuilding dependency treeReading state information... DoneReading extended st…

django第二個項目--使用模板做一個站點訪問計數器

上一節講述了django和第一個項目HelloWorld&#xff0c;這節我們講述如何使用模板&#xff0c;并做一個簡單的站點訪問計數器。 1、建立模板 在myblog模塊文件夾&#xff08;即包含__init__.py的文件夾)下面新建一個文件夾templates&#xff0c;用于存放HTML模板&#xff0c;在…