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

歡迎訪問 生活随笔!

生活随笔

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

python

python 内置方法赋值_Python内置数据结构之字符串str

發布時間:2023/12/20 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 内置方法赋值_Python内置数据结构之字符串str 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 數據結構回顧

所有標準序列操作(索引、切片、乘法、成員資格檢查、長度、最小值和最大值)都適用于字符串,但是字符串是不可變序列,因此所有的元素賦值和切片賦值都是非法的。

>>> website = 'http://www.python.org'

>>> website[-3:] = 'com'Traceback (most recent call last):

File"", line 1, in?

website[-3:] = 'com'TypeError: object doesn't support slice assignment

View Code

通過名稱來訪問其各個值的數據結構。這種數據結構稱為映射(mapping) 。字典是Python中唯一的內置映射類型,其中的值不按順序排列,而是(值)存儲在鍵下。鍵可能是數、字符串或元組。

2. 字符串

print ( "hello,world!")? ??"hello,world!" 是字符串,字符串在幾乎所有真實可用的Python程序中都會存在,并且有多種用法,其中最主要的用法就是表示一些文本。字符串是值,就像數字一樣。str,repr和反引號是將Python值轉換成 字符串的3種方法。

2.1 字符串基礎

a.單引號字符串和轉義引號

>>> 'let's go'? ? ? ? ? # 后面的黑色字體部分Python無法識別

SyntaxError: invalid syntax

>>> 'let\'s go'? ? ? ? ? # 在常規字符串中,反斜杠扮演著特殊角色:它對字符進行轉義,讓你能夠在字符串中包含原本無法包含的字符。? ?反斜線(\),可以換行。

"let's go"

>>> "let's go!"? ? ? ? ?# 用""對'加以區分

"let's go!"

b.拼接字符串

>>> "let's say:" '"hello,world!"'

'let\'s say:"hello,world!"'

>>> 'hello,' + 'world!'

'hello,world!'

可以使用 + 操作符來連接 (粘在一起); 使用 * 操作符重復

>>> word = 'help ' + 'me! '

>>> word

'help me! '

>>> ''

''

>>>

注意:

兩個靠著一起的字符串會自動的連接; 上面例子的第一行也可以寫成 word = 'Help' 'A'; 這只能用于兩個字符串常量, 而不能用于任意字符串表達式。

c.字符串表示,str和repr

Python打印值的時候會保持值在代碼中的狀態,而不是你希望用戶看到的狀態,通過使用print,結果將不同。

>>> "Hello, world!"

'Hello, world!'

>>> print("Hello, world!")

Hello, world!

如果再加上表示換行符的編碼\n,差別將更明顯。

>>> 'hello,\nworld!'

'hello,\nworld!'

>>> print('hello,\nworld!')

hello,

world!

>>>

str,repr和反引號是將Python值轉換成 字符串的3種方法。

通常會獲得值的合法Python表達式表示。則意味著產生一個解釋器易讀的表達形式 (或者如果沒有這樣的語法會給出?SyntaxError?).

str()?函數 ,(實際是類,工廠函數;str和int、long一樣,是一種類型。repr僅僅是函數)

使用str能以合理的方式將值轉換為用戶能夠看懂的字符串。例如,盡可能將特殊字符編碼轉換為相應的字符。

對于那些沒有特殊表達的對象,?str()?將會與?repr()?返回相同的值. 很多的值, 如數字或一些如列表和字典那樣的結構, 使用這兩個函數的結果完全一致. 字符串與浮點型則有兩種不同的表達。

repr和反引號則把結果字符串轉換為合法的Python表達式。

d.長字符串,原始字符串和Unicode

有一些獨特而有用的字符串表示方式。例如,有一種獨特的語法可用于表示包含換行符或反斜杠的字符串(長字符串和原始字符串)。對于包含特殊符號的字符串,

Python 2還提供了一種專用的表示語法,結果為Unicode字符串。這種語法現在依然管用,但是多余,因為在Python 3中,所有的字符串都是Unicode字符串。 Python 3還引入了一種新語法,用于表示大致相當于老式字符串的字節對象。在處理Unicode編碼方面,這種對象依然扮演著重要的角色。

請注意,指定原始字符串時,可使用單引號或雙引號將其括起,還可使用三引號將其括起。

i. 長字符串

字符串可以使用一對匹配的三引號對包圍: """ 或 '''。當使用三引號時, 回車不需要被舍棄, 他們會包含在字符串里。

>>> print('''This is a very long string. It continues here.

And it's not over yet. "Hello, world!"

Still here.''')

This is a very long string. It continues here.

And it's not over yet. "Hello, world!"

Still here.

>>>

ii. 原始字符串

原始字符串不以特殊方式處理反斜線。

>>> path = 'C:\nowhere'

>>> path

'C:\nowhere'

>>> print(path)? ? ? ? ? ? ? ? ? ? ?# 打印出問題

C:

owhere

>>> print('C:\\nowhere')? ? ? ?#對反斜杠本身進行轉義。

C:\nowhere

>>>

對于很長的路徑,將需要使用大量的反斜杠。

在這樣的情況下,原始字符串可派上用場,因為它們根本不會對反斜杠做特殊處理,而是讓字符串包含的每個字符都保持原樣。

>>> print(r'C:\nowhere')

C:\nowhere

>>> print(r'C:\Program Files\fnord\foo\bar\baz\frozz\bozz')

C:\Program Files\fnord\foo\bar\baz\frozz\bozz

>>>

iii.? Unicode、 bytes和bytearray

Python字符串與二進制的關系

python 3中最重要的新特性可能就是將文本(text)和二進制數據做了更清晰的區分。文本總是用unicode進行編碼,以str類型表示;而二進制數據以bytes類型表示。

在python3中,不能以任何隱式方式將str和bytes類型二者混合使用。不可以將str和bytes類型進行拼接,不能在str中搜索bytes數據(反之亦然),也不能將str作為參數傳入需要bytes類型參數的函數(反之亦然)。

Unicode

大致而言,每個Unicode字符都用一個碼點(code point)表示,而碼點是Unicode標準給每個字符指定的數字。這讓你能夠以任何現代軟件都能識別的方式表示129個文字系統中的12萬個以上的字符。當然,鑒于計算機鍵盤不可能包含幾十萬個鍵,因此有一種指定Unicode字符的通用機制:使用16或32位的十六進制字面量(分別加上前綴\u或\U)或者使用字符的Unicode名稱(\N{name})。

>>> "\u00C6"

'?'

要獲悉字符的Unicode碼點和名稱,可在網上使用有關該字符的描述進行搜索,也可參閱特定的網站,如http://unicode-table.com。

Bytes

Unicode的理念很簡單,卻帶來了一些挑戰,其中之一是編碼問題。在內存和磁盤中,所有對象都是以二進制數字(0和1)表示的(這些數字每8個為一組,即1字節),字符串也不例外。在諸如C等編程語言中,這些字節完全暴露,而字符串不過是字節序列而已。為與C語言互操作以及將文本寫入文件或通過網絡套接字發送出去,Python提供了兩種類似的bytes類型:不可變的bytes和可變的bytearray。如果需要,可直接創建bytes對象(而不是字符串),方法是使用前綴b:

>>> b'Hello, world!'

b'Hello, world!

然而, 1字節只能表示256個不同的值,離Unicode標準的要求差很遠。 Python bytes字面量只支持ASCII標準中的128個字符,而余下的128個值必須用轉義序列表示,如\xf0表示十六進制值0xf0(即240)。? ?8位一個字節,一位是一個bite,8位最多表示255個符號。

唯一的差別好像在于可用的字母表規模,但實際上并非完全如此。乍一看,好像ASCII和Unicode定義的都是非負整數和字符之間的映射,但存在細微的差別: Unicode碼點是使用整數定義的,而ASCII字符是使用對應的數及其二進制編碼定義的。

這一點好像無關緊要,原因之一是整數0~255和8位二進制數之間的映射是固定的,幾乎沒有任何機動空間。問題是超過1字節后,情況就不那么簡單了:直接將每個碼點表示為相應的二進制數可能不再可行。這是因為不僅存在字節順序的問題(即便對整數值進行編碼,也會遇到這樣的問題),而且還可能浪費空間:如果對于每個碼點都使用相同數量的字節進行編碼,就必須考慮到文本可能包含安那托利亞象形文字或皇家亞蘭字母。有一種Unicode編碼標準是基于這種考慮的,它就是UTF-32(32位統一編碼轉換格式, Unicode Transformation Format 32 bits),但如果你主要處理的是使用互聯網上常見語言書寫的文本,那么使用這種編碼標準將很浪費空間。然而,有一種非常巧妙的替代方式:不使用全部32位,而是使用變長編碼,即對于不同的字符,使用不同數量的字節進行編碼。這種編碼方式主要出自計算機先鋒Kenneth Thompson之手。通過使用這種編碼,可節省占用的空間,就像摩爾斯碼使用較少的點和短線表示常見的字母,從而減少工作量一樣。具體地說,進行單字節編碼時,依然使用ASCII編碼,以便與較舊的系統兼容;但對于不在這個范圍內的字符,使用多個字節(最多為6個)進行編碼。

下面來使用ASCII、UTF-8、UTF-16和UTF-32編碼將字符串轉換為bytes。

>>> "Hello, world!".encode("ASCII")

b'Hello, world!'

>>> "Hello, world!".encode("UTF-8")

b'Hello, world!'

>>> "Hello, world!".encode("UTF-16")

b'\xff\xfeH\x00e\x00l\x00l\x00o\x00,\x00 \x00w\x00o\x00r\x00l\x00d\x00!\x00'

>>> "Hello, world!".encode("UTF-32")

b'\xff\xfe\x00\x00H\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00,\x00\x00\x00 \x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00l\x00\x00\x00d\x00\x00\x00!\x00\x00\x00'

>>>

>>> len("How long is this?".encode("UTF-8"))17

>>> len("How long is this?".encode("UTF-16"))36

>>> len("How long is this?".encode("UTF-32"))72

>>>說明: 在所有情況下,都最好使用UTF-8。事實上,它也是默認使用的編碼。

View Code

幾乎在所有情況下,都最好使用UTF-8。它是默認使用的編碼。

.encode()可將字符串編碼為bytes,.decode()可將bytes解碼為字符串。

可不使用方法encode和decode,而直接創建bytes和str(即字符串)對象,這種方法更通用一些,在你不知道類似于字符串或bytes的對象屬于哪個類時,使用這種方法也更管用。一個通用規則是,不要做過于嚴格的假設。

>>> "H?ll?, w?rld!".encode()

b'H\xc3\xa6ll\xc3\xa5, w\xc3\xb8rld!'

>>> b'H\xc3\xa6ll\xc3\xa5, w\xc3\xb8rld!'.decode()'H?ll?, w?rld!'

>>> bytes("H?ll?, w?rld!", encoding="utf-8")

b'H\xc3\xa6ll\xc3\xa5, w\xc3\xb8rld!'

>>> str(b'H\xc3\xa6ll\xc3\xa5, w\xc3\xb8rld!', encoding="utf-8")'H?ll?, w?rld!'

>>>

View Code

>>> msg = "我愛北京天安門!"

>>> print(msg.encode(encoding = "utf-8"))

b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8\xef\xbc\x81'

>>> print(msg.encode(encoding = "utf-8").decode(encoding = "utf-8"))

我愛北京天安門!>>>

View Code

編碼和解碼的最重要用途之一是,將文本存儲到磁盤文件中。然而, Python提供的文件讀寫機制通常會替你完成這方面的工作!只要文件使用的是UTF-8編碼,就無需操心編碼和解碼的問題。但如果原本正常的文本變成了亂碼,就說明文件使用的可能是其他編碼。

最后, Python還提供了bytearray,它是bytes的可變版。從某種意義上說,它就像是可修改的字符串——常規字符串是不能修改的。然而, bytearray其實是為在幕后使用而設計的,因此作為類字符串使用時對用戶并不友好。例如,要替換其中的字符,必須將其指定為0~255的值。

因此,要插入字符,必須使用ord獲取其序數值(ordinal value)。

>>> x = bytearray(b"Hello!")

>>> x[1] = ord(b"u")

>>> x

bytearray(b'Hullo!')

>>>

2.2 字符串格式

字符串格式設置涉及的內容很多,基本思想是對字符串調用方法format,并提供要設置其格式的值。字符串包含有關如何設置格式的信息,而這些信息是使用一種微型格式指定語言(mini-language)指定的。每個值都被插入字符串中,以替換用花括號括起的替換字段。要在最終結果中包含花括號,可在格式字符串中使用兩個花括號(即{{或}})來指定。

Python提供了多種字符串格式設置方法。以前,主要的解決方案是使用字符串格式設置運算符——百分號。這個運算符的行為類似于C語言中的經典函數printf:在%左邊指定一個字符串(格式字符串),并在右邊指定要設置其格式的值。指定要設置其格式的值時,可使用單個值(如字符串或數字),可使用元組(如果要設置多個值的格式),還可使用字典,其中最常見的是元組。

%s稱為轉換說明符 ,指出了要將值插入什么地方。 s意味著將值視為字符串進行格式設置。如果指定的值不是字符串,將使用str將其轉換為字符串。其他說明符將導致其他形式的轉換。例如, %.3f將值的格式設置為包含3位小數的浮點數。

>>> a = "hello, %s. %s said!"

>>> b = ('world', 'he')

>>> a % b

'hello, world. he said!'

>>>

2.2.1 替換字段名

向format提供要設置其格式的未命名參數或參數指定名稱 ;

>>> "{i} {} {sleep} {}".format(1, 2, sleep=4, i=3)

'3 1 4 2'

通過索引來指定要在哪個字段中使用相應的未命名參數 ,可以不按順序使用未命名參數。

>>> "{i} {1} {sleep} {0}".format(1, 2, sleep=4, i=3)

'3 2 4 1'

訪問提供的值的組成部分

>>> fullname = ["alex", "Li"]

>>> 'Mr {name[0]}'.format(name=fullname)

'Mr alex'

>>>

使用索引,還可使用句點表示法來訪問導入的模塊中的方法、屬性、變量和函數(看起來很怪異的變量__name__包含指定模塊的名稱)。

>>> import math

>>> tmpl = "The {mod.__name__} module defines the value {mod.pi:f} for π"

>>> tmpl.format(mod = math)

'The math module defines the value 3.141593 for π'

>>>

2.2.2 轉化

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

>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))

π 'π' '\u03c0'

>>>

>>> "The number is {num:f}".format(num=42)

'The number is 42.000000'

字符串格式設置中的類型說明符

類型? 含 義

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.2.3 寬度,精度,分隔符,對齊

寬度是使用整數指定的,如下所示:

>>> "{num:10}".format(num=3)

' 3'

>>> "{name:10}".format(name="Bob")

'Bob '

精度使用整數指定的,需要在它前面加上一個表示小數點的句點。

>>> "Pi day is {pi:.2f}".format(pi=pi)

'Pi day is 3.14'

使用逗號來指出你要添加千位分隔符。

>>> 'One googol is {:,}'.format(10**100)

'One googol 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'

在指定寬度和精度的數前面,可添加一個標志。這個標志可以是零、加號、減號或空格,其中零表示使用0來填充數字。

>>> '{:010.2f}'.format(pi)

'0000003.14'

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

>>> from math importpi>>> print('{0:<10.2f}\n{0:^10.2f}\n{0:>10.2f}'.format(pi))3.14

3.14

3.14

>>>

View Code

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

>>> "{:$^15}".format(" WIN BIG ")

'$$$ WIN BIG $$$'

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

>>> 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

>>>

View Code

字符串格式設置示例

width = int(input('Please enter width:'))

price_width= 7

#指定price符的字段寬度,默認以空格填充

item_width = width -price_width

header_fmt= '{{:^{}}}{{:>{}}}'.format(item_width, price_width)#要指定左對齊、右對齊和居中,可分別使用< >和^ 。

fmt = '{{:{}.2f}}'.format(item_width, price_width)#可以使用填充字符來擴充對齊說明符,這樣將使用指定的字符而不是默認的空格來填充。#"{:$^15}".format(" WIN BIG ") ——>$$$ WIN BIG $$$#.2f 將值(價格)的格式設置為包含2位小數的浮點數。

print('=' *width)print(header_fmt.format('Item', 'Price'))print('-' *width)print(fmt.format('Apples', 0.4))print(fmt.format('Pears', 0.5))print(fmt.format('Cantaloupes', 1.92))print(fmt.format('Dried Apricots (16 oz.)', 8))print(fmt.format('Prunes (4 lbs.)', 12))print('=' *width)

執行結果:

View Code

2.3 字符串基本操作

name = "my name is alex"

print(name.capitalize()) #首字母大寫

print(name.count("a")) #統計a的個數

print(name.center(50, "-")) #美觀打印,打印50個字符,不夠用-補上

print(name.encode(encoding="utf-16")) #使用utf-16將字符串轉化為bytes

print(name.endswith("ex")) #判斷一個字符串以什么結尾(判斷郵件地址是否以.com結尾)#name = "my \tname is alex"

print(name.expandtabs(tabsize=30)) #將 Tab鍵轉換成多少個空格

print(name.find("n")) #查找,字符串的索引

print(name[name.find("name"):]) #字符串可以切片,從name開始截斷

執行結果:

My nameisalex2

-----------------my name is alex------------------b'\xff\xfem\x00y\x00 \x00n\x00a\x00m\x00e\x00 \x00i\x00s\x00 \x00a\x00l\x00e\x00x\x00'True

my nameisalex3nameis alex

View Code

name = "my name is {name} and i am {years} old."

print(name.format(name='alex', years=23)) #格式化

——>my name is alex and i am 23old.print(name.format_map({'name': 'alex', 'years': 12})) #字典,格式化

——>my name is alex and i am 12old.#print(name.isalnum())

print('123Abc123'.isalnum()) #判斷是否為數字和字母

——>Trueprint('ABCas'.isalpha()) #判斷是否為字母

print('1237'.isdecimal()) #判斷是否為十進制

print('123'.isdigit()) #判斷是否為整數

print('As3adf'.isidentifier()) #判斷是否為一個合法的標識符(變量名)

print('13414'.isnumeric()) #判斷是否為一個數字

print('My Name is'.istitle()) #判斷是每個字符的首字母是否為大寫

——>Falseprint('MY NAME IS'.isupper()) #判斷是每個字符是否為大寫

——>Trueprint('+'.join(['1', '2', '3'])) #將列表轉化成字符串

——>1+2+3

print(name.ljust(50, '*')) #滿足長50,不夠在句尾用*補足

——>my name is {name} and i am {years} old.***********

print(name.rjust(50, '*')) #滿足長50,不夠在句首用*補足

——>***********my name is {name} andi am {years} old.

執行結果:(——>后為執行結果,沒有標注的全部為True)

my nameis alex and i am 23old.

my nameis alex and i am 12old.

True

True

True

True

True

True

False

True1+2+3my nameis {name} and i am {years} old.***********

***********my name is {name} and i am {years} old.

View Code

print("Djf".lower()) #將大寫字母變小寫

print("djf".upper()) #將小寫字母變大寫

print('------')print("\ndjf".lstrip()) #去左邊的空格和回車

print("DJF\n".rstrip()) #去右邊的空格和回車

print("DJF\n".strip()) #去兩邊的空格和回車

print('------')

p= str.maketrans("abcdef",'123456')print("alex li".translate(p)) #對應字母替換,密鑰

print('------')print("alex li".replace('l', 'L')) #對應字母替換

print("alex li".replace('l', 'L', 1)) #對應字母替換

print('------')print("alex li".rfind('l')) #從左向右,最后一個l的下標

print("al exli li".split('l')) #按照分隔符,將字符串分成列表

print('1+2+3+4'.split('+'))print('1+2\n+3+4'.splitlines()) #換行

print("Alex Li".swapcase()) #大小寫變換

print("alex li".title()) #首字母變大寫

View Code

總結

以上是生活随笔為你收集整理的python 内置方法赋值_Python内置数据结构之字符串str的全部內容,希望文章能夠幫你解決所遇到的問題。

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