學(xué)習(xí)python3的野路子——字符串(string)、列表(list)、切片(slice)

字符串(string)

python3中變量可以不用設(shè)置變量類型,各種類型可以相互轉(zhuǎn)化??赡苓@就是字符串使用如此靈活的一個原因。以下介紹一些基本概念,詳細細節(jié)參見對應(yīng)參考資料。

  • 字符串的一些基本操作[1][2]

    1. 如何表示字符串類型:使用單引號('),雙引號( "),三引號('''""") 對文本進行包裹就能得到字符串。
    2. 可以用+對字符串進行拼接以及*對字符串進行復(fù)制并拼接至原字符串末尾。
    3. 與C語言中字符串相似,python的字符串也可通過索引訪問單個字符。還可以通過切片操作訪問某個區(qū)間內(nèi)數(shù)據(jù)。
  • 字符串提供的一些字符串方法[3]

    1. len()用于返回字符串長度。

    2. 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ù)的空格進行分割字符串,并且不返回空字符串。

    3. 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]。

  • 列表的一些基本操作
    1. 列表的表示:用[]包裹數(shù)據(jù),列表中的元素用,分隔。
    2. 列表的創(chuàng)建:s = [ ]創(chuàng)建空列表,s = ['a', 'b' ]創(chuàng)建含有兩個字符的列表。
    3. 使用innot in 判斷元素是否在列表中;使用+對兩個列表進行拼接;使用*對列表進行復(fù)制并拼接至原字符串末尾。
    4. 類似C++中的vector類型,列表可以通過索引訪問單個元素,同時可以使用切片訪問連續(xù)區(qū)域的若干元素。

      關(guān)于列表的復(fù)制
      newS = s僅僅是將newS的指向s的地址空間,因此s的改變都會影響newS
      newS = s[: ]則是將s中的所有元素放到newS指向的空間,因此s的改變并不會改變newS中的數(shù)據(jù)。
      因此,在創(chuàng)建多維列表[6]時,需要注意這個問題

    5. 關(guān)于遍歷列表使用循環(huán)語句即可。
  • 列表的一些函數(shù)
    1. append(x)在列表之后添加一個新的元素x,保持列表中數(shù)據(jù)類型的一致,如果不同可以根據(jù)IDE提示更改為set或tuple類型。
    2. pop([i])彈出第i個元素,其中i為可選參數(shù),未傳入?yún)?shù)時默認為i = -1
    3. reverse()用于將列表自身反序,與s[: : -1](在文末討論)的返回值相同。
    4. 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)iNone時為0,jNone時為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時,
    1. 當(dāng)i(j)為負數(shù)時,i = len(s) + i(j = len(s) + j)。
    2. 當(dāng)iNone時為len(s) - 1jNone時為-1。
    3. 當(dāng)j+1 > i+1時,返回空列表;否則進入4。
    4. 完成上述判斷之后,取原列表[j+1, i+1)區(qū)間內(nèi)的元素后逆序得到新列表,之后在新列表中選取間隔-k的元素組成作為結(jié)果的列表。

關(guān)于第七份參考資料[7]以及其他[8]中的測試

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]
# []

以第三個為例,

ij不是None,但為負。則令i = len(s) + (-1) = 9 - 1 = 8;同理,j = 6
取原列表中[j+1, i+1)的子列表,得到[8, 9];在做逆序操作,得到[9, 8]。
按間隔k = 1組成返回的列表,即[9, 8]。

參考


  1. https://www.w3cschool.cn/python3/python3-string.html ?

  2. https://intellipaat.com/tutorial/python-tutorial/datatypes-in-python/ ?

  3. https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str ?

  4. http://www.cnblogs.com/zhengyuxin/articles/1938300.html ?

  5. https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range ?

  6. https://docs.python.org/3/faq/programming.html#faq-multidimensional-list ?

  7. https://stackoverflow.com/questions/509211/understanding-slice-notation ? ?

  8. https://bytes.com/topic/python/answers/823372-string-i-j-k ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,993評論 0 2
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,202評論 0 9
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評論 0 38
  • 自從大一加入交大武協(xié)后,跟學(xué)長學(xué)了一年的雙節(jié)棍單棍,自己練了一年雙棍,后面基本自學(xué)加四處求教。 發(fā)現(xiàn)喜歡雙節(jié)棍的人...
    喬的簡書閱讀 4,228評論 1 3
  • 牙齒這個東西真的是天生有好壞的,是看基因的。從小看牙醫(yī)就是我的最大噩夢。當(dāng)然,牙醫(yī)估計也很怕我,我的慘叫聲肯定嚴重...
    lxy_568f閱讀 437評論 0 0

友情鏈接更多精彩內(nèi)容