python數據類型之字符串

目錄

1.字符串概念和注意事項

2.字符串內置函數

3.字符串的索引、切片和遍歷

4.字符串運算符

5.字符串常用方法

性質判斷

開頭結尾判斷

是否存在某個子串

大小寫等格式轉化

子串替換

刪除兩端空白字符

格式化字符串

分割與合并

6.字符串模板

7.exec 函數

8.字符串加密和解密


1.字符串概念和注意事項

字符串是 str 類的一個對象。
python中的字符串用單引號或者雙引號都可以。
在 python 中,具有相同內容的字符串是 str 類的同一個對象,具有相同的 id。
s1 = "abc" 
s2 = "abc"
print(id(s1)) 
print(id(s1) == id(s2))  # True
一個字符串對象是不可變的,比如 s[0] = 'x' 這樣的替換操作會報錯
s = "abc"
s[2] = 'x'

報錯提示

TypeError: 'str' object does not support item assignment

解釋:s = "abc"表示生成了一個s變量,s = "abc"語句后,在內存中開辟了一塊地址,專門用來存放"abc"這個字符串,且s當前所代表的內存地址是"abc"的地址。字符串對象不可變指的是"abc"是不可變的,s[0]='x'操作就是試圖將存放在內存中的"abc"的第一個元素改為'x',這是不允許的。

如果你想要修改字符串中的某個字符,你必須創建一個新的字符串。例如,你可以通過切片(slicing)和字符串連接(concatenation)等來實現這一點

s = "abc"
s2 = s[:2] + 'x'
print(s2)  # abx

也可以對變量重新賦值,本質是對變量s更換了一個地址

s = "abc"
print(id(s))
s = "abx"
print(id(s))

2.字符串內置函數

常用的有len獲取長度,max獲取最大字符等

s = "ac1" 
print(len(s))  # 返回字符串的長度,3
print(max(s))  # 返回字符串中“最大”的字符,c
print(min(s))  # 返回字符串中“最小”的字符,1

3.字符串的索引、切片和遍歷

字符串的下標
從左到右是是從 0 到 len(s)-1,從右(末尾)到左就是 -1 到 -len(s)
相當于有s[-x] = s[-x + len(s)] ,其中 ?-x 表示負數。
字符串的切片操作
s[start: end],返回的是從下標 start 開始到下標 end – 1 的一個字符串
意味著有如下等式
s[0: len(s)] = ss[: 4] = s[0: 4]
s[2: ] = s[2: len(s)]
s[ : ] = ss[ : -1] = s[0: -1] = s[0 : -1 + len(s)]
s[-2 : ] = s[-2 : len(s)] = s[-2 + len(s) : len(s)]
s[-5 : -2] = s[-5 + len(s) : -2 + len(s)]s[1 : y] = s[1 : len(s)] # 如果 y >= len(s)的話
s[2 : 1] = '' # 空串
s[2 : 2] = '' # 空串
用 for 循環遍歷字符串中的所有字符
for ch in "abcd":print(ch, end=" ")  
# a b c d

4.字符串運算符

連接運算符 +
print('ab' + 'cd') # abcd
復制運算符 *
print('ab' * 2) # abab
print(2 * 'ab') # abab
in 和 not in 成員運算符
print('He' in "He and I") # True
print('he' in "He and I") # False
print('he' not in "he ta") # False
比較運算符 ==, !=, <, <=, >, >=
從下標 0 開始的第一個字符開始比較,若相等則判斷下一個下標的字符,根據 ASCII 碼大小判斷
通常: 數字字符 < 大寫字母字符 < 小寫字母字符
print("abc" < "abcd")   # True
print("abd" < "a1c")   # False
print("Jane" < "Jacksandffs")  # False

5.字符串常用方法

性質判斷

返回值為布爾變量 bool

s.isalnum(),如果字符串中的字符只有數字或者字母,則返回 True

s.isalpha(),如果字符串中的字符只有字母,則返回 True

s.isdigit(),如果字符串中的字符只有數字,則返回 True

s.isdecimal(),如果字符是十進制數字,則返回 True

print('234 '.isdigit()) # False
print('234'.isdigit()) # True

s.isidentifier(),如果這個字符串滿足 python 標識符的要求,則返回 True

print('_radius'.isidentifier()) # True
print('2radius'.isidentifier()) # False
s.islower(),如果字符串中的字母部分全是小寫的,且字符串不為空串,則返回 True
s.isupper(),如果字符串中的字母部分全是大寫的,且字符串不為空串,則返回 True
print('2ad '.islower()) # True
print('2Ad '.islower()) # False
print('2AD '.isupper()) # True
s.isspace(),如果字符串中的字符只有空格,則返回 True
print('2 '.isspace()) # False
print(' '.isspace()) # True

開頭結尾判斷

s.endswith(s1),如果字符串 s 是以子串 s1 結尾,則返回 True
s.startswith(s2),如果字符串 s 是以子串 s2 開頭,則返回 True
print('radius'.endswith("usa")) # False
print('radius'.startswith("ra")) # True

是否存在某個子串

s.find(s1, starti, endi),返回字符串 s 中第一次出現子串 s1 時,此時 s1 第一個字符的下標;找不到返回-1

s.rfind(s1, starti, endi),返回字符串 s 中最后一次出現子串 s1 時,此時 s1 第一個字符的下標;找不到返回-1

s.count(s1, starti, endi),返回子串 s1 在字符串 s 中出現的無覆蓋的次數,index 在 starti 到 endi 之間查找
print("mynameisname".find('name'))  # 2
print("mynameisname".rfind('name'))  # 8
print("xxxxabc".count('xx'))  # 2
print("xxxxabcxxx".count('xx'))  # 3data = "hello world"
if data.find("age") == -1:print("not find")
else:print("exist")

大小寫等格式轉化

s.capitalize(),返回只大寫第一個字符的字符串

s.lower(),返回全是小寫的字符串

s.upper(),返回全是大寫的字符串

s.title(),返回只將每個單詞首字母大寫的字符串

s.swapcase(),返回大小寫互換的字符串,就是大寫字母變成小寫,小寫字母變大寫

print("the happy of python".title())  # The Happy Of Python

子串替換

s.replace(old, new),返回一個字符串,舊子串被替換成新子串
s = "abcd" 
s1 = s.replace("ab", "xyz")
print(s) # abcd
print(s1) # xyzcd

技巧:替換為空字符串表示刪除

s = "abcdab"
s1 = s.replace("ab", "")
print(s)  # abcd
print(s1)  # cd

刪除兩端空白字符

字符 " ", \t, \n 等都被稱作為空白字符,說明空格是空白字符的一種
s.strip(),返回字符串,刪除了原字符串兩端的空白字符
s.lstrip(),返回字符串,刪除了原字符串左端的空白字符
s.rstrip(),返回字符串,刪除了原字符串右端(末端)的空白字符
注意不能刪除中間的空白字符
s = "  x  y  z   "
s1 = s.strip()
print(f"({s1})")   # (x  y  z)

格式化字符串

第一種方法:用 format 函數
第二種:用字符串自帶方法
s.center(width, "*"),返回字符串,在指定寬度上居中對齊,第二個參數是填充,默認是填充空格
s.ljust(width),返回字符串,在指定寬度上左對齊
s.rjust(width),返回字符串,在指定寬度上右對齊
s = "abcd" 
s1 = s.center(10)
print(f"({s1})")   # (   abcd   )

分割與合并

完全切割
mystr = "A1021879743 # 1021879743 # www.1021879743@qq.com"
mylist = mystr.split(" # ")  # 按照 # 切割,返回列表
print(mylist)  # ['A1021879743', '1021879743', 'www.1021879743@qq.com']
次數切割
mystr = "88548 n 小姐 女 22 162"
mylist = mystr.split(" ", 2)  # 按空格切割,切割 2 次就停止
print(mylist)  # ['88548', 'n', '小姐 女 22 162']
按行切割
mystr = """88548 
n 小姐 女
22 162"""
mylist = mystr.splitlines()  # 根據換行符切割
print(mylist)   # ['88548 ', 'n 小姐 女', '22 162']

字符串partition()函數

partition()方法用來根據指定的分隔符將字符串進行分割。

如果字符串包含指定的分隔符,則返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。

如果未找到separator參數,字符串本身和兩個空字符串

data = "name=bob;age=10"
ret = data.partition(";")
print(ret)   # ('name=bob', ';', 'age=10')data = "name=bob"
ret = data.partition(";")
print(ret)   # ('name=bob', '', '')

字符串合并:join 函數

將列表等可迭代對象按特定符號拼接成字符串

mystr = "這是一個國家級機密"
lst = list(mystr)
print(lst)  # ['這', '是', '一', '個', '國', '家', '級', '機', '密']newstr = "#".join(mystr)
print(newstr)  # 這#是#一#個#國#家#級#機#密

6.字符串模板

提前準備一個字符串模板,類似于作文模板,然后用的時候往作文模板里面的指定位置設置指定的值,即可生成一篇文章。
from string import Template  # string 模塊導入 Template# print(type(Template))  # <class 'string._TemplateMetaclass'># 搭建模板
mystr = Template("hi, $name 你是 $baby")# 模板使用
print(mystr.substitute(name="羅翔", baby="老師"))
print(mystr.substitute(name="張三", baby="學生"))'''
hi, 羅翔 你是 老師
hi, 張三 你是 學生
'''

7.exec 函數

作用:將字符串當做命令行語句來執行

import os
mystr = 'os.system("notepad")'
exec(mystr)

8.字符串加密和解密

加密:按指定規律將字符串的每一個字符變為另一個字符。

解密:將加密后的內容指定規律還原原內容。

第一種:自定義加碼:str.maketrans(old, new)

翻譯替換
作用:翻譯、解密
mystr = "hello python 我,我,你"
table = str.maketrans("我你 x", "他它 y")  # 我替換成他,你替換成它,x 替換成 y
print(mystr)  # hello python 我,我,你
print(mystr.translate(table))  # hello python 他,他,它
第二種:自定義通過 ASCII 碼對字符加密
realStr = "這是一個國家級機密"
key = 5faceStr = [chr(ord(x) + key) for x in list(realStr)]
print(faceStr)  # ['連', '昴', '丅', '丯', '圂', '宻', '緯', '朿', '寋']correctStrList = [chr(ord(x) - key) for x in list(faceStr)]
correctStr = "".join(correctStrList)
print(correctStr)

這些是最基礎最簡單的加密解密,日常使用足夠。


end

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

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

相關文章

【Linux】-Zookeeper安裝部署[17]

簡介 apache ZooKeeper是一個分布式的&#xff0c;開放源碼的分布式應用程序協調服務&#xff0c;是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件&#xff0c;提供的功能包括&#xff1a;配置維護、域名服務、分布式同步、組服務等。 除了為Hadoop和H…

2024最新 Jenkins + Docker 實戰教程(四) - 編寫自己的Springboot項目實現自動化部署

&#x1f604; 19年之后由于某些原因斷更了三年&#xff0c;23年重新揚帆起航&#xff0c;推出更多優質博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Mi…

VMware Num Lock 總自動切換的問題解決

VMware Num Lock 總自動切換的問題解決 0. 問題描述1. 解決方法 0. 問題描述 使用 VMware 虛擬機時&#xff0c;鼠標在 VMware 和主機之間切換時&#xff0c;總是顯示 “Num Lock 開” 和 “Num Lock 關” 的提示框。 1. 解決方法 在 VMware 系統中&#xff0c;按 fn num 統…

0407放大電路的頻率響應

放大電路的頻率響應 單時間常數RC電路的頻率響應中頻響應高頻響應低頻響應全頻域響應 放大電路頻率響應概述1. 直接耦合放大電路頻域響應阻容耦合放大電路頻域響應 4.7.1 單時間常數RC電路的頻率響應 4.7.2 放大電路頻率響應概述 4.7.3 單級共射極放大電路的頻率響應 4.7.4 單級…

TOSHIBA UTLH21 屬于Unifi NV系列

TOSHIBA UTLH21 是東芝推出的一款工業控制器&#xff0c;屬于Unifi NV系列。 這款控制器代表了東芝在工業自動化領域的一次重要進步&#xff0c;它在功能和性能上都超越了現有的V系列控制器。以下是UTLH21的一些主要特點&#xff1a; 高速邏輯與控制能力&#xff1a;UTLH21具…

Spring框架中獲取方法參數名稱:DefaultParameterNameDiscoverer

DefaultParameterNameDiscoverer 是Spring框架中用于獲取方法參數名稱的一個類。在Java中&#xff0c;方法的參數名稱通常在編譯時會丟失&#xff0c;因為Java字節碼并不強制要求保留這些信息。Spring提供了一種機制來恢復這些參數名稱&#xff0c;這就是通過DefaultParameterN…

IT行業的現狀與未來趨勢

這里寫目錄標題 一、引言二、IT行業的現狀三、IT行業面臨的挑戰四、IT行業的未來趨勢五、結論 一、引言 信息技術&#xff08;IT&#xff09;行業在過去幾十年中經歷了飛速發展&#xff0c;從早期的計算機硬件和軟件開發&#xff0c;到如今涵蓋云計算、人工智能、大數據、物聯…

深度學習之基于Django+Tensorflow卷積神經網絡實時口罩檢測系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景 隨著全球疫情的持續&#xff0c;佩戴口罩成為了公眾日常生活中不可或缺的一部分。特別是在人員密集的…

【python】python社交交友平臺系統設計與實現(源碼+數據庫)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…

BEVFuison測試全過程記錄

cuda版本10.1 pytorch&#xff1a; 根據cuda版本選擇pytorch版本&#xff1a; 1. 創建conda虛擬環境&#xff1a; conda create -y --name mmcv python3.8 conda activate mmcv2. 安裝依賴庫&#xff1a; pytorch: conda install pytorch1.7.1 torchvision0.8.2 torchaudi…

智能代理四大范式解析

Agent四大范式 在2024年紅杉資本人工智能峰會上,著名的人工智能專家吳恩達發表了一場備受關注的演講,深入探討了智能代理(agent)的四大范式。這四大范式代表了當前AI技術在不同應用領域中的核心方法和實踐,分別是反思(Reflection)、工具使用(Tool Use)、規劃(Planni…

特征融合篇 | YOLOv8改進之引入輕量級跨尺度特征融合模塊CCFM | 源自RT-DETR

前言:Hello大家好,我是小哥談。CCFM(Cross-Scale Feature Fusion Module)即為跨尺度特征融合模塊。這個模塊的作用是將不同尺度的特征通過融合操作整合起來,以增強模型對于尺度變化的適應性和對小尺度對象的檢測能力。CCFM可以有效地整合細節特征和上下文信息,從而提高模…

2024定制版搶單支付系統源碼(開代理自動搶單接單)

隨著網絡和移動支付技術的不斷進步&#xff0c;搶單支付系統已經成為商家和用戶進行交易的便利工具。2024定制版搶單支付系統源碼為開發者提供了一個可定制化的解決方案&#xff0c;具備開放代理和自動搶單接單功能&#xff0c;幫助用戶快速搭建搶單支付平臺。本文將為您介紹這…

專題匯編 | ChatGPT引領AIGC新浪潮(一)

ChatGPT的產生與迭代 2022年11月末,美國人工智能研究實驗室OpenAI推出ChatGPT。上線的ChatGPT只用了2個月,活躍用戶數就突破了1億,創造了應用增速最快的紀錄。 ChatGPT是什么 ChatGPT是一種人工智能技術驅動的自然語言處理(Natural Language Processing,NLP)工具,使用的…

20240520金融讀報:旅游強國金融數據要素升級融資性貿易房地產政策變化

1、房地產政策變化&#xff1a;1&#xff09;刺激買方&#xff1a;降首付&#xff0c;公積金貸款利率下調0.25%&#xff0c;商貸貸款利率不設下限 2&#xff09;托底賣方&#xff1a;“白名單”貸款項目&#xff0c;覆蓋項目建成交付的資金缺口 3&#xff09;增加賣方&#xff…

RS8751XF功能和參數介紹及PDF資料

以下是關于RS8751XF的功能和參數的介紹&#xff1a; 功能描述: 高速、寬帶單通道運算放大器 軌到軌輸入和輸出&#xff0c;確保較大的動態范圍 極高的增益帶寬乘積&#xff08;GBW&#xff09;&#xff1a;250 MHz&#xff0c;適合高頻應用 極高的壓擺率&#xff08;SR&#xf…

MySQL的ODBC驅動下載、安裝以及配置數據源

下載地址&#xff1a;odbc官方下載地址 MySQL :: Download Connector/ODBC 下載安裝ODBC驅動 配置MySQL ODBC 數據源 進入控制面板->系統和安全->Windows工具 Data Source Name填寫需要生成的ODBC數據源的名稱。Description選填。如果使用遠程數據庫服務器&a…

鴻蒙應用開發系列 篇五:鴻蒙系統高級開發技術

文章目錄 系列文章Web組件通知窗口管理網頁圖形庫(WebGL)媒體安全訪問控制用戶認證其他網絡與連接電話服務數據管理文件管理后臺任務管理設備管理系列文章

mysql--數據庫表的創建及基礎命令

今日目標 表的創建 數據庫的數據類型 表的約束 表結構的修改和調整 數據庫的權限管理 單表的數據的CRUD sql的一些規范 SQL的分類 SQL腳本注意點 SQL的注釋 ISO提出SQL官方注釋&#xff1a; 1、多行注釋 /* */ 2、當行注釋 -- 注釋 注意&#xff0c;空格是必不可少的…

微信小程序抓取數據包(Proxifier聯動burpsuite)

1、打開bp&#xff0c;確保開啟127.0.0.1&#xff1a;8080監聽地址。 2、點擊setting--proxy&#xff0c;點擊impor CA certificate&#xff0c;生成bp的證書。 保存到桌面為1.cer&#xff0c;文件后綴為cer就OK了&#xff0c;前綴任意 3、安裝證書&#xff0c;雙擊打開剛剛生成…