【Python從零到壹】Python的字符串詳解

以前咱們學習過一個不可變的序列叫元組,今天咱們探討的字符串,也是一個不可變序列。
java

文章目錄

    • 1) 查詢操做
    • 2) 字符串的經常使用操做
    • a) 大小寫轉換
    • b) 字符串內容對齊操做
    • c) 字符串的拆分
    • d) 字符串的判斷方法
    • e) 字符串的其餘操做
    • f) 字符串的比較
    • g) 字符串的切片
    • h) 格式化字符串
    • 1) 字符串的定義
    • 1. 字符串的建立
    • 2. 字符串的經常使用操做
    • 總結


1. 字符串的建立

一個概念: 字符串的駐留機制
那什麼是字符串的駐留機制呢?
意思是: 僅保留一份相同且不可變字符串的方法,不一樣的值被存放在字符串的駐留池中,python的駐留機制對相同的字符串只保留一份拷貝,後續建立相同字符串時候,不會開闢新的空間,而是把該字符串的地址從新賦值給新建的變量。python

1) 字符串的定義

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sa='itlaoxin'b="itlaoxin"c='''itlaoxiin'''print(a,b,c,id(a),id(b),id(c))

輸出結果
在這裏插入圖片描述api

能夠看到ID都是同樣的。ide

在內存中只有一份函數

幾點注意事項:
在交互模式下,能實現駐留機制的狀況:學習

  • 字符串的長度爲0 或者1時
  • 符合標識符的字符串
  • 字符串只在編譯時候進行駐留,而非運行時
  • 【-5,256】之間的整數數字
  • 在這裏插入圖片描述

2. 字符串的經常使用操做

關於字符串的操做,咱們能夠把字符串當作是關於字符的列表:spa

1) 查詢操做

  • index() 查找字符串substr第一次出現的位置,若是查找的子串不存在,拋出異常
  • rindex() 查找字符串substr最後一次出現的問題,若是不存在,則報異常
  • find() 查找子串substr第一次出現的位置,不存在返回-1
  • rfind 查找子串substr最後一次出現的位置,若不存在返回 -1
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss='hello,world'print(s.index('l')) #2print(s.find('l')) #2print(s.rfind('l')) #9print(s.rindex('l')) #9

這裏建議你們使用find,或者rfind,由於不會報異常3d

2) 字符串的經常使用操做

a) 大小寫轉換

  • upper() 把字符串中全部的字符都轉化成大寫字母(會產生新的字符串對象)
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"a=s.upper()print(s)print(a)

  • lower() 把字符串中全部的字符都轉換成小寫字母
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"a=s.lower()print(s)print(a)

輸出結果:
hello,ITlaoxin
hello,itlaoxinorm

  • swapcase() 把字符串中全部的大寫字母轉換成小寫字母,把全部的小寫字母轉換成大寫字母
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"a=s.swapcase()print(a,id(a))print(s,id(s))

  • capitalize() 把第一個字符轉換成大寫,把其他的字符轉換成小寫
  • tilele( )把每一個單詞的第一個字符轉換成大寫,把每一個讀單詞的剩餘字符轉換成小寫
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"a=s.title()print(a)

b) 字符串內容對齊操做

  • center() 居中對齊
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"print(s.center(20,'*'))

在這裏插入圖片描述
一共14個字符,定義20個字符,左右各三個對象

  • ljust() 左對齊
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"print(s.ljust(20,"*"))

在這裏插入圖片描述
若是不寫* ,默認是空格

  • rjust 右對齊
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"print(s.rjust(20,"*"))

在這裏插入圖片描述

  • zfill 右對齊
    這種方式會用0填充
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"print(s.zfill(20))

在這裏插入圖片描述

c) 字符串的拆分

  • split() 分割,從左邊開始,默認的分割符是空格,分割完後是列表
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello,ITlaoxin"lst=s.split()print(lst)

輸出結果:

['hello,ITlaoxin']

咱們能夠指定分割符,用sep=‘|’ 的形式

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello|ITlaoxin|gaosh"lst=s.split(sep='|')print(lst)

輸出結果

['hello', 'ITlaoxin', 'gaosh']

若是這個地方咱們用默認的空格會是什麼結果:

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello|ITlaoxin|gaosh"lst=s.split()print(lst)

結果

['hello|ITlaoxin|gaosh']

能夠看到,由於這個字符串中沒有空格,因此他就是一個元素的列表。

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello|ITlaoxin|gaosh"lst=s.split(sep='|',maxsplit=1)print(lst)

結果:

['hello', 'ITlaoxin|gaosh']

這裏只拆分了一次。

  • rsplit() 從字符右邊開始拆分,默認拆分字符是空格,返回值是一個列表
    maxsplit能夠指定最大拆分次數

這個和split的使用方法同樣,只是rsplist是從右邊開始拆分,splist從左邊拆分

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss="hello|ITlaoxin|gaosh"lst=s.split(sep='|',maxsplit=1)print(lst)lst1=s.rsplit(sep='|',maxsplit=1)print(lst1)

結果如圖所示:
在這裏插入圖片描述

d) 字符串的判斷方法

  • isidentifier() 判斷指定的字符串是不是合法的標識符
  • isspace() 判斷指定的字符串是否所有由空白字符組成(回車,換行,水平指製表符)
  • issalpha() 判斷字符串是否所有由字母組成
  • isdecimal( )判斷指定字符串是否所有是十進制組成
  • isnumeric() 判斷指定的字符串所有由數字組成
  • isalnum()判斷指定字符串是否所有由字母和數字組成
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss='hello,world,python'print('1',s.isidentifier())print('2','hello'.isidentifier())print('3','\t'.isidentifier())print('4','abc'.isspace())print('5','abc'.isalpha())print('6','1'.isspace())print('7','123'.isnumeric())print('8','abc123'.isalnum())print('9','123abc!'.isalnum())

e) 字符串的其餘操做

  • 字符串的替換replace()
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6ss='hello,world,python'print(s.replace('python','itlaoxin'))s1='hello,python,python ,python'print(s1.replace('python','itlaoxin',2))

結果:

hello,world,itlaoxin
hello,itlaoxin,itlaoxin ,python

  • 字符串的合併 join()
# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6slst=['hello','java','python']print('|'.join(lst))

結果:hello|java|python

f) 字符串的比較

使用運算符 >,>= ,<,<= ,= ,!=

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sprint('1','itlaoxin'>'laoxin')print('2','itlaoxin'>'itlaox')

結果:
1 False
2 True

若是第一個字母就不相同,就比較原始值 ord()

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sprint('1','itlaoxin'>'laoxin')print('2','itlaoxin'>'itlaox')print('3','python'>'java')## 至關於print(ord('p'),ord('j'))

在這裏插入圖片描述

第三個至關於112與106比較

g) 字符串的切片

字符串是不可變類型,不具有增刪改查的操做,切片是會產生新的對象的

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sa='hello,world,itlaoxin'print(a[:5])

輸出結果:
hello

不寫起始位置,它會從index0開始切

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sa='hello,world,itlaoxin'print(a[6:]) #world,itlaoxin

沒有指定結束位置,會切到最後

step是指定步長

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sa='hello,world,itlaoxin'print(a[1:8:2]) #el,o

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sa='hello,world,itlaoxin'print(a[1:8:2])print(a[::2]) #hlowrdiloi

h) 格式化字符串

爲何要格式化字符串呢?
字符串的拼接會產生新的Id,會形成空間浪費, 這個時候就須要使用字符串的格式化。

格式化字符串的兩種方式:
% 作佔位符

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6s#第一種方式%name='互聯網老辛'age=40
print('我叫%s,今年%d歲了'%(name,age))

{} 作佔位符

要使用到format()方法

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6s#第一種方式%name='互聯網老辛'age='40'print('我叫{0},今年{1}歲了'.format(name,age))

除此以外還能夠表示精讀和寬度:

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sprint('%d'% 99)print('%10d'% 99)

這裏的10表示的就是寬度

精度:
保留3位小數

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sprint('%.3f' % 3.11516)

混合使用:

# 做者:互聯網老辛# 開發時間:2021/4/4/0004 6sprint('%10.3f' % 3.11516)

%10.3f
總寬度爲10,小數點保留3位

總結

到如今全部的數據類型的基本操做就介紹完了,這些應該都算是基礎,接下來咱們要進入到函數的章節。

我是互聯網老辛,從事技術行業已經12年了,教育行業5年,也算是一個老人了。 今年開始把本身學到的東西分享出來,但願可以幫到你們,若是對你有用,能夠點贊收藏。 您的每一次轉發,收藏,都是對做者最大的鼓勵。

相關文章
相關標籤/搜索