導航:首頁 > 編程語言 > python3子字元串

python3子字元串

發布時間:2023-08-31 08:35:49

1. python3字元串都是什麼編碼

編碼

字元串是一種數據類型,但是,字元串比較特殊的是還有一個編碼問題。

因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時採用8個比特(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進制11111111=十進制255),如果要表示更大的整數,就必須用更多的位元組。比如兩個位元組可以表示的最大整數是65535,4個位元組可以表示的最大整數是4294967295。

由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機里,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

Unicode

Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。

Unicode標准也在不斷發展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代操作系統和大多數編程語言都直接支持Unicode。

現在,捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個位元組,而Unicode編碼通常是2個位元組。

字母A用ASCII編碼是十進制的65,二進制的01000001;

字元0用ASCII編碼是十進制的48,二進制的00110000,注意字元'0'和整數0是不同的;

漢字已經超出了ASCII編碼的范圍,用Unicode編碼是十進制的20013,二進制的01001110 00101101。

如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可以,因此,A的Unicode編碼是00000000 01000001。

新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不劃算。

所以,又出現了把Unicode編碼轉化為「可變長編碼」的UTF-8編碼。UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間:

字元

ASCII

Unicode

UTF-8

A 01000001 00000000 01000001 01000001

中 x 01001110 00101101 11100100 10111000 10101101

從上面的表格還可以發現,UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟體可以在UTF-8編碼下繼續工作。

搞清楚了ASCII、Unicode和UTF-8的關系,我們就可以總結一下現在計算機系統通用的字元編碼工作方式:

在計算機內存中,統一使用Unicode編碼,當需要保存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。

用記事本編輯的時候,從文件讀取的UTF-8字元被轉換為Unicode字元到內存里,編輯完成後,保存的時候再把Unicode轉換為UTF-8保存到文件:

瀏覽網頁的時候,伺服器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器:

所以你看到很多網頁的源碼上會有類似<meta charset="UTF-8" />的信息,表示該網頁正是用的UTF-8編碼。

Python的字元串

在最新的Python 3版本中,字元串是以Unicode編碼的,也就是說,Python的字元串支持多語言,例如:

>>> print('包含中文的str')
包含中文的str

對於單個字元的編碼,Python提供了ord()函數獲取字元的整數表示,chr()函數把編碼轉換為對應的字元:

1個中文字元經過UTF-8編碼後通常會佔用3個位元組,而1個英文字元只佔用1個位元組。

在操作字元串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。

Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行

#!/usr/bin/env python3# -*- coding: utf-8 -*-

第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。

格式化:

在Python中,採用的格式化方式和C語言是一致的,用%實現,舉例如下:

format % (...params)
>>> 'Hello, %s' % 'world''Hello, world'>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)'Hi, Michael, you have $1000000.'

%運算符就是用來格式化字元串的。在字元串內部,%s表示用字元串替換,%d表示用整數替換,%x表示16進制整數,有幾個%?佔位符,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?,括弧可以省略。

格式化整數和浮點數還可以指定是否補0和整數與小數的位數:

>>> '%2d-%02d' % (3, 1)' 3-01'>>> '%.2f' % 3.1415926'3.14'

有些時候,字元串裡面的%是一個普通字元怎麼辦?這個時候就需要轉義,用%%來表示一個%:

>>> 'growth rate: %d %%' % 7'growth rate: 7 %'

2. python3 字元串多少個漢字

在python中一個漢字算一個字元,一個英文字母算一個字元。如:
## coding:utf-8
s='我們的'
k=len(s)
print(k)
輸出結果是3。
===================================
所以,可以採取排除法,凡返回字元的ascII碼在大於127的作為漢字統計。
## coding:utf-8
s='我們的88工作和生活168'
k=len(s)
print(k)
n=0
for c in s:
if ord(c)>127:
n+=1
print(n)

3. Python字元串是什麼,如何使用

字元串的表示

字元串可以被成對的單引號(single quote)或雙引號(double quotes)包圍起來,這兩者的作用是一樣的:

更多關於Python的基礎性知識可以看下這個網頁的視頻教程,Python常見的數據類型及使用方法掌握,希望我的回答能幫到你。

4. python3 16進制字元串、列表、字元串之間的轉換

在Python操作數據內容時,多數情況下可能遇到下面3種類型的數據處理:

hexstring 如:ƇC532145697A8B6F'

str 如:'x1Cx53x21x45x69x7Ax8Bx6F'

list 如:[0x1C, 0x53, 0x21, 0x45, 0x69, 0x7A, 0x8B, 0x6F]

各種第三方模塊(如pyDes),或者自己寫的介面中,可能存在由於類型不統一需要在這3種數據中來回切換的情況。

需要用到的核心的方法如下:

list() 將對象轉換為list

str() 將對象轉換為str

bytearray() 將對象轉換為bytearray

bytearray.fromhex() 將對象從hexstring轉換為bytearray

binascii.b2a_hex() 將對象從str轉換為hexstring

如:[0x53, 0x21, 0x6A] -> 'x53x21x6a'

方法:list -> bytearray -> str

如:'x53x216a' -> [0x53, 0x21, 0x6A]
方法:逐個字元轉成十進制

如: [0x53, 0x21, 0x6A] -> �A'
方法:list -> bytearray -> str -> hexstring

如: �A' -> [0x53, 0x21, 0x6A]
方法:hexstring -> bytearray -> list

如: �A' -> 'x53x21x6A'
方法:hexstring -> bytearray -> str

以上內容轉自: https://blog.csdn.net/diaoxuesong/article/details/72123415#

5. Python字元串

字元串 :在python中是作為序列存在的,序列中的元素具有從左到右的順序,並根據他們的相對位置進行讀取和儲存。嚴格意義來說,字元串是一系列單個字元組成的序列,其他類型的序列還包括列表和元組。在一串字元兩側加上雙引號或者單引號即可創建字元串。

注意 :如果字元串中需要出現雙引號或者單引號,則有兩種方法。
1)使用轉義字元()進行轉義。
2)將雙引號和單引號配合使用,即若向想列印單引號,可以使用雙引號表示字元串,在字元串中只用一個單引號。反之亦然。

在一個字元串前面加上r;則會自動為字元串中的反斜杠轉義,使其只代表一個反斜杠。但是注意,原始字元串最後不能有反斜杠,否則會發生語法錯誤。如果非要在原始字元串最後加上,則可以寫為。

運行結果為:

有時我們需要創建一個跨行的字元串,則可以使用三引號來創建。

運行結果為

1)可以通過len()函數得到序列的長度。

運行結果為:

2)可以通過索引操作得到序列的各個元素值。python中序列的索引是從0開始依次向後推移。

運行結果為:

3)python還支持反向索引,是從最後一個向前推移的。-1是指序列中的最後一個元素值,-len(str)是指該序列的第一個元素值。

運行結果為:

4)序列還支持一種 分片(slice) 的操作,這是一種能夠一步提取整個分片的方法。
分片可以看作是字元串中一部提取出其中一部分的方法。其一般形式為:X[I:J],表示從X序列中取出第I個元素到不包含第J個元素的部分,結果為返回一個新的對象。

運行結果為:

在一個分片(slice)中,左邊界默認為0。同時應注意負偏移量在分片中的邊界,也應為左側數字比右側數字小。拷貝全部字元串的用法為str[:]。

運行結果為:

5)作為一個序列,字元串還支持用「+」來合並字元串。

運行結果為:

6) 不可變性 ,python中字元串具有不可變性,在創建一個字元串之後不可以通過對其某一位置進行賦值而改變該字元串,但可以通過創建一個新的字元串並以同一個變數名命名。

運行結果為:

7)除了一般的序列操作,字元串還有一些其特有的操作方法。
如find()方法,可以用於查找一個子字元串,可以返回該子字元串的索引值。但如果存在多個符合的子字元串,只會返回第一個索引值。如果不存在該子字元串,則返回-1。replace(S1,S2)方法會將字元串中的S1替換為S2。

運行結果如下:

關於字元串,python還有許多內置函數,可以通過調用dir()函數來查看。

6. 如何同時賦值三個字元串Python

與兩個變數的賦值方法一樣。
1、交換兩個變數可以簡單的使用A, B = B, A的語句來完成。2、查看該函數的反匯編,可以看到python首先載入三個值,依次執行了ROT_THREE和ROT_TWO指令。3、函數的返回值可以是多個值。可以直接將函數返回值賦值給多個變數。

7. 459. 重復子字元串(Python)

難度:★☆☆☆☆
類型:數組

給定一個非空的字元串,判斷它是否可以由它的一個子串重復多次構成。給定的字元串只含有小寫英文字母,並且長度不超過10000。

示例 1:
輸入: "abab"
輸出: True
解釋: 可由子字元串 "ab" 重復兩次構成。

示例 2:
輸入: "aba"
輸出: False

示例 3:
輸入: "abcabcabcabc"
輸出: True
解釋: 可由子字元串 "abc" 重復四次構成。 (或者子字元串 "abcabc" 重復兩次構成。)

這里我們觀察到一個現象,對於一個字元串s,我們將兩個該字元串連接成一個更長的字元串(s_double),該字元串中至少包含兩個s子串,如果s可以由多個重復單元構成,那麼合並後的字元串中一定包含超過兩個s子串(可重疊),例如,兩個"abab"組成的"abababab"中包含3個"abab",而兩個"aba"組成的"abaaba"則只包含兩個"aba",根據這個原理,我們只需要統計s+s中s(可重疊)出現的次數,並與2比較即可。

這里為了簡化計算,我們把s+s的首尾兩端字元去掉,這樣就只需要查看s是否在剩餘的字元串中即可。編碼時通過索引范圍[1:len(s)*2-1]起到去掉首尾兩端字元的效果。

如有疑問或建議,歡迎評論區留言~

閱讀全文

與python3子字元串相關的資料

熱點內容
英雄聯盟山東伺服器地址 瀏覽:212
sd伺服器什麼意思 瀏覽:617
thinkphp去indexphp 瀏覽:62
電腦顯示連接未加密 瀏覽:193
zao伺服器怎麼修改 瀏覽:244
php使用jsapi調起支付 瀏覽:891
vivo雲伺服器網 瀏覽:722
cmd遠程連接命令行 瀏覽:961
黑馬python講義 瀏覽:133
php高並發測試 瀏覽:88
第二屆程序員節開幕式 瀏覽:84
運維程序員腳本 瀏覽:371
塑源碼燕窩的安全性 瀏覽:176
作業調度採用高響應比優先調度演算法 瀏覽:160
和平精英如何切換蘋果到安卓 瀏覽:532
資料庫調用表單的命令 瀏覽:923
程序員技能大賽 瀏覽:11
什麼app買品牌衣服 瀏覽:15
手機看世界名著哪個app好 瀏覽:495
運行命令切換列印機用戶 瀏覽:921