字符串(string)
python3中變量可以不用設(shè)置變量類型,各種類型可以相互轉(zhuǎn)化??赡苓@就是字符串使用如此靈活的一個原因。以下介紹一些基本概念,詳細細節(jié)參見對應(yīng)參考資料。
-
- 如何表示字符串類型:使用單引號(
'),雙引號("),三引號('''或""") 對文本進行包裹就能得到字符串。 - 可以用
+對字符串進行拼接以及*對字符串進行復(fù)制并拼接至原字符串末尾。 - 與C語言中字符串相似,python的字符串也可通過索引訪問單個字符。還可以通過切片操作訪問某個區(qū)間內(nèi)數(shù)據(jù)。
- 如何表示字符串類型:使用單引號(
-
字符串提供的一些字符串方法[3]:
len()用于返回字符串長度。-
split(sep=None, maxsplit=-1)需要分別傳入兩個參數(shù)界定字符串和最大分割次數(shù)。
當(dāng)maxsplit為-1表示無限次分割,否則將字符串按照界定字符串分割maxsplit次。
關(guān)于sep不為空的時候,按照給定的sep對字符串進行分割;當(dāng)待分割的字符串是空字符串時,返回的列表是['']。對于參考資料中的例子:運行
'1,,2'.split(','),得到['1', '', '2']
可以這樣理解,split函數(shù)從左到右按照sep對字符串進行分割,并將分割后得到的字符左側(cè)放入返回列表中,之后再對字符串右邊用sep進行分割。關(guān)于
sep為空時,將按照連續(xù)的空格進行分割字符串,并且不返回空字符串。 replace(old, new[, count])用old為原字符串中待替換的字符串,用new表示的新的字符串做替換,并返回一個替換后的拷貝字符串。[, count]中[ ]的含義是可選參數(shù)。count參數(shù)是控制替換操作需要進行幾次。
-
以下是一些程序。
# PAT中的基礎(chǔ)編程題目集函數(shù)題7-2 time, passtime = input().split(' ') # 將讀入的字符串按空格進行分割,并賦值 hour = int(time) // 100 # 將字符串類型轉(zhuǎn)化為整型,并做整數(shù)運算 min = int(time) % 100 endtime = hour * 60 + min + int(passtime) endtime = endtime // 60 * 100 + endtime % 60 print(endtime)# PAT中的基礎(chǔ)編程題目集函數(shù)題7-31 # 解題思路:只要考慮小于字符串長度的移位操作,同時考慮到移位只是將前幾個連續(xù)字符接到原字符串尾 # 因為等于字符長度的移位操作就是字符本身 # 需要得到小于字符串長度的的移位操作,只需要取余 # 移位操作可用切片操作完成 Str = input() n = eval(input()) % len(Str) # 將讀入字符串作為python語句運行,將運行結(jié)果用字符長度取余 print(Str[n: ] + Str[ : n]) # 對字符串進行切片
列表(list)
python3中的list有較多的操作以及函數(shù),以下簡單羅列部分,更多內(nèi)容參見對應(yīng)參考資料[4][5]。
- 列表的一些基本操作
- 列表的表示:用
[和]包裹數(shù)據(jù),列表中的元素用,分隔。 - 列表的創(chuàng)建:
s = [ ]創(chuàng)建空列表,s = ['a', 'b' ]創(chuàng)建含有兩個字符的列表。 - 使用
in或not in判斷元素是否在列表中;使用+對兩個列表進行拼接;使用*對列表進行復(fù)制并拼接至原字符串末尾。 - 類似C++中的
vector類型,列表可以通過索引訪問單個元素,同時可以使用切片訪問連續(xù)區(qū)域的若干元素。關(guān)于列表的復(fù)制
newS = s僅僅是將newS的指向s的地址空間,因此s的改變都會影響newS。
newS = s[: ]則是將s中的所有元素放到newS指向的空間,因此s的改變并不會改變newS中的數(shù)據(jù)。
因此,在創(chuàng)建多維列表[6]時,需要注意這個問題 - 關(guān)于遍歷列表使用循環(huán)語句即可。
- 列表的表示:用
- 列表的一些函數(shù)
-
append(x)在列表之后添加一個新的元素x,保持列表中數(shù)據(jù)類型的一致,如果不同可以根據(jù)IDE提示更改為set或tuple類型。 -
pop([i])彈出第i個元素,其中i為可選參數(shù),未傳入?yún)?shù)時默認為i = -1。 -
reverse()用于將列表自身反序,與s[: : -1](在文末討論)的返回值相同。 -
len()返回列表長度。
-
- 以下是程序
# PAT中的基礎(chǔ)編程題目集函數(shù)題7-6 listdata = input() listdata = listdata.split(' ') print('%c %d %.2f %.2f' %(listdata[2], int(listdata[1]), float(listdata[0]), float(listdata[3]))) # 其中float()將其轉(zhuǎn)換為浮點類型
關(guān)于切片(slice)
s[i:j:k][7]這種形式返回[i, j)區(qū)間內(nèi)每隔k的元素組成的新列表.當(dāng)i為None時為0,j為None時為len(s)。其中的k不能為0。
再說明一下各個字母的含義:i表示起始位置,j表示終止位置后一位,k表示間隔。
如執(zhí)行s = [1, 2, 3, 4, 5, 6]和print(s[0: 3: 2]),得到[1, 3]。
該過程可以直觀的理解為:
- 當(dāng)
k > 0時,返回[i, j)區(qū)間內(nèi)每隔k的元素組成的新列表。 - 當(dāng)
k < 0時,- 當(dāng)
i(j)為負數(shù)時,i = len(s) + i(j = len(s) + j)。 - 當(dāng)
i為None時為len(s) - 1;j為None時為-1。 - 當(dāng)
j+1 > i+1時,返回空列表;否則進入4。 - 完成上述判斷之后,取原列表
[j+1, i+1)區(qū)間內(nèi)的元素后逆序得到新列表,之后在新列表中選取間隔-k的元素組成作為結(jié)果的列表。
- 當(dāng)
s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(s[: : -1])
print(s[5: 1: -2])
print(s[-1: -3: -1])
print(s[-3: : -1])
print(s[: -1: -1])
# 運行結(jié)果
# [9, 8, 7, 6, 5, 4, 3, 2, 1]
# [6, 4]
# [9, 8]
# [7, 6, 5, 4, 3, 2, 1]
# []
以第三個為例,
i和j不是None,但為負。則令i = len(s) + (-1) = 9 - 1 = 8;同理,j = 6。
取原列表中[j+1, i+1)的子列表,得到[8, 9];在做逆序操作,得到[9, 8]。
按間隔k = 1組成返回的列表,即[9, 8]。
參考
-
https://intellipaat.com/tutorial/python-tutorial/datatypes-in-python/ ?
-
https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str ?
-
https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range ?
-
https://docs.python.org/3/faq/programming.html#faq-multidimensional-list ?
-
https://stackoverflow.com/questions/509211/understanding-slice-notation ? ?
-
https://bytes.com/topic/python/answers/823372-string-i-j-k ?