日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python字符串解释_Python学习:字符串的简单解释,深入浅出

發布時間:2025/3/20 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python字符串解释_Python学习:字符串的简单解释,深入浅出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字符串是python很常見的一種數據類型,比如日志的打印,程序中函數的注釋,數據庫的訪問,變量的操作都需要用到字符串。

一、字符串基礎

字符串是由獨立字符組成的一個序列,通常包含在單引號(’’)雙引號("")或者三引號之中(’’’ ‘’'或""" “”",兩者一樣),比如下面幾種寫法。

name = 'jason'

city = 'beijing'

text = "welcome to jike shijian"

Python 中單引號、雙引號和三引號的字符串是一模一樣的,沒有區別。

s1 = 'hello'

s2 = "hello"

s3 = """hello"""

s1 == s2 == s3

True

Python 同時支持這三種表達方式,很重要的一個原因就是,這樣方便你在字符串中,內嵌帶引號的字符串。

Python 的三引號字符串,則主要應用于多行字符串的情境,比如函數的注釋等等。

同時,Python 也支持轉義字符。所謂的轉義字符,就是用反斜杠開頭的字符串,來表示一些特定意義的字符。

在轉義字符的應用中,最常見的就是換行符’\n’的使用。比如文件讀取,如果我們一行行地讀取,那么每一行字符串的末尾,都會包含換行符’\n’。而最后做數據處理時,我們往往會丟掉每一行的換行符。

二、字符串的常用操作

可以把字符串想象成一個由單個字符組成的數組,所以,Python 的字符串同樣支持索引,切片和遍歷等等操作。

name = 'jason'

name[0]

'j'

name[1:3]

'as'

和其他數據結構,如列表、元組一樣,字符串的索引同樣從 0 開始,index=0 表示第一個元素(字符),[index:index+2] 則表示第 index 個元素到 index+1 個元素組成的子字符串。

遍歷字符串同樣很簡單,相當于遍歷字符串中的每個字符。

for char in name:

print(char)

j

a

s

o

n

要注意,Python 的字符串是不可變的(immutable)。因此,用下面的操作,來改變一個字符串內部的字符是錯誤的,不允許的。

s = 'hello'

s[0] = 'H'

Traceback (most recent call last):

File "", line 1, in

TypeError: 'str' object does not support item assignment

Python 中字符串的改變,通常只能通過創建新的字符串來完成。比如上述例子中,想把’hello’的第一個字符’h’,改為大寫的’H’,我們可以采用下面的做法:

s = 'H' + s[1:]

s = s.replace('h', 'H')

第一種方法,是直接用大寫的’H’,通過加號’+'操作符,與原字符串切片操作的子字符串拼接而成新的字符串。

第二種方法,是直接掃描原字符串,把小寫的’h’替換成大寫的’H’,得到新的字符串。

在其他語言中,如 Java,有可變的字符串類型,比如 StringBuilder,每次添加、改變或刪除字符(串),無需創建新的字符串,時間復雜度僅為 O(1)。這樣就大大提高了程序的運行效率。

但可惜的是,Python 中并沒有相關的數據類型,我們還是得老老實實創建新的字符串。因此,每次想要改變字符串,往往需要 O(n) 的時間復雜度,其中,n 為新字符串的長度。

但也有一個例外,打破了字符串不可變的特性。就是使用加法操作符’+='的字符串拼接方法。

str1 += str2 # 表示 str1 = str1 + str2

看下面的例子的時間復雜度

s = ''

for n in range(0, 100000):

s += str(n)

每次循環,似乎都得創建一個新的字符串;而每次創建一個新的字符串,都需要 O(n) 的時間復雜度。因此,總的時間復雜度就為 O(1) + O(2) + … + O(n) = O(n^2)。

但這只適用于老版本的python,自從 Python2.5 開始,每次處理字符串的拼接操作時(str1 += str2),Python 首先會檢測 str1 還有沒有其他的引用。如果沒有的話,就會嘗試原地擴充字符串 buffer 的大小,而不是重新分配一塊內存來創建新的字符串并拷貝。這樣的話,上述例子中的時間復雜度就僅為 O(n) 了。

另外,對于字符串拼接問題,除了使用加法操作符,我們還可以使用字符串內置的 join 函數。string.join(iterable),表示把每個元素都按照指定的格式連接起來。

l = []

for n in range(0, 100000):

l.append(str(n))

l = ' '.join(l)

由于列表的 append 操作是 O(1) 復雜度,字符串同理。因此,這個含有 for 循環例子的時間復雜度為 n*O(1)=O(n)。

字符串的分割函數 split()。string.split(separator),表示把字符串按照 separator 分割成子字符串,并返回一個分割后子字符串組合的列表。它常常應用于對數據的解析處理,比如我們讀取了某個文件的路徑,想要調用數據庫的 API,去讀取對應的數據,我們通常會寫成下面這樣:

def query_data(namespace, table):

"""

given namespace and table, query database to get corresponding

data

"""

path = 'hive://ads/training_table'

namespace = path.split('//')[1].split('/')[0] # 返回'ads'

table = path.split('//')[1].split('/')[1] # 返回 'training_table'

data = query_data(namespace, table)

此外,常見的函數還有:

string.strip(str),表示去掉首尾的 str 字符串;

string.lstrip(str),表示只去掉開頭的 str 字符串;

string.rstrip(str),表示只去掉尾部的 str 字符串。

這些在數據的解析處理中同樣很常見。比如很多時候,從文件讀進來的字符串中,開頭和結尾都含有空字符,我們需要去掉它們,就可以用 strip() 函數:

s = ' my name is jason '

s.strip()

'my name is jason'

Python 中字符串還有很多常用操作,比如,string.find(sub, start, end),表示從 start 到 end 查找字符串中子字符串 sub 的位置等等。更多的字符串操作自行查閱文檔。

三、字符串格式化

通常,我們使用一個字符串作為模板,模板中會有格式符。這些格式符為后續真實值預留位置,以呈現出真實值應該呈現的格式。字符串的格式化,通常會用在程序的輸出、logging 等場景。

舉一個常見的例子。比如我們有一個任務,給定一個用戶的 userid,要去數據庫中查詢該用戶的一些信息,并返回。而如果數據庫中沒有此人的信息,我們通常會記錄下來,這樣有利于往后的日志分析,或者是線上 bug 的調試等等。

print('no data available for person with id: {}, name: {}'.format(id, name))

其中的

string.format()

,就是所謂的格式化函數;而大括號{}就是所謂的格式符,用來為后面的真實值——變量 name 預留位置。如果id = ‘123’、name=‘jason’,那么輸出便是:

'no data available for person with id: 123, name: jason'

不過要注意,string.format() 是最新的字符串格式函數與規范。自然,我們還有其他的表示方法,比如在 Python 之前版本中,字符串格式化通常用 % 來表示,那么上述的例子,就可以寫成下面這樣:

print('no data available for person with id: %s, name: %s' % (id, name))

當然,新的版本提出來

格式化字符串f-string

,亦稱為格式化字符串常量(formatted string literals),是Python3.6新引入的一種字符串格式化方法,主要目的是使格式化字符串的操作更加簡便。f-string在形式上是以 f 或 F 修飾符引領的字符串(f’xxx’ 或 F’xxx’),以大括號 {} 標明被替換的字段。

f-string在功能方面不遜于傳統的%-formatting語句和str.format()函數,同時性能又優于二者,且使用起來也更加簡潔明了,因此對于Python3.6及以后的版本,推薦使用f-string進行字符串格式化。

簡單使用

f-string用大括號 {} 表示被替換字段,其中直接填入替換內容:

>>> name = 'Eric'

>>> f'Hello, my name is {name}'

'Hello, my name is Eric'

>>> number = 7

>>> f'My lucky number is {number}'

'My lucky number is 7'

>>> price = 19.99

>>> f'The price of this book is {price}'

'The price of this book is 19.99'

表達式求值與函數調用

f-string的大括號 {} 可以填入表達式或調用函數,Python會求出其結果并填入返回的字符串內:

>>> f'A total number of {24 * 8 + 4}'

'A total number of 196'

>>> f'Complex number {(2 + 2j) / (2 - 3j)}'

'Complex number (-0.15384615384615388+0.7692307692307692j)'

>>> name = 'ERIC'

>>> f'My name is {name.lower()}'

'My name is eric'

>>> import math

>>> f'The answer is {math.log(math.pi)}'

'The answer is 1.1447298858494002'

引號、大括號與反斜杠

f-string大括號內所用的引號不能和大括號外的引號定界符沖突,可根據情況靈活切換 ’ 和 ":

>>> f'I am {"Eric"}'

'I am Eric'

>>> f'I am {'Eric'}'

File "", line 1

f'I am {'Eric'}'

^

SyntaxError: invalid syntax

lambda表達式

f-string大括號內也可填入lambda表達式,但lambda表達式的 : 會被f-string誤認為是表達式與格式描述符之間的分隔符,為避免歧義,需要將lambda表達式置于括號 () 內:

>>> f'result is {lambda x: x ** 2 + 1 (2)}'

File "", line 1

(lambda x)

^

SyntaxError: unexpected EOF while parsing

>>> f'result is {(lambda x: x ** 2 + 1) (2)}'

'result is 5'

>>> f'result is {(lambda x: x ** 2 + 1) (2):

'result is +5.00 '

總結

主要是Python 字符串的一些基本知識和常用操作。

需要注意的是:

Python 中字符串使用單引號、雙引號或三引號表示,三者意義相同,并沒有什么區別。其中,三引號的字符串通常用在多行字符串的場景。

Python 中字符串是不可變的(前面所講的新版本 Python 中拼接操作’+='是個例外)。因此,隨意改變字符串中字符的值,是不被允許的。

Python 新版本(2.5+)中,字符串的拼接變得比以前高效了許多,你可以放心使用。

Python 中字符串的格式化(string.format)常常用在輸出、日志的記錄等場景。同時還有最新的f-string格式化字符串。

參考:

《Python核心技術與實踐》

《f-string的使用》

總結

以上是生活随笔為你收集整理的python字符串解释_Python学习:字符串的简单解释,深入浅出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。