1. 程式人生 > 其它 >編寫程式將一行英文中指定的字串替換為另一字串後輸出。注意:查詢指定字串_Python 基礎入門(五)從字串到字典 學習小結...

編寫程式將一行英文中指定的字串替換為另一字串後輸出。注意:查詢指定字串_Python 基礎入門(五)從字串到字典 學習小結...

技術標籤:編寫程式將一行英文中指定的字串替換為另一字串後輸出。注意:查詢指定字串

一. 學習路線概述

學習地址:

Python入門(中) - AI開發者體驗中心​developer.aliyun.com f6904d4f0f3749e7df6b3e1bc39ce985.png

總學習路線:

  1. 列表
  2. 元組
  3. 字串
  4. 字典
  5. 集合
  6. 序列

本章學習3~4小節。

二. 具體學習內容

字串

1. 字串的定義

  • Python 中字串被定義為引號之間的字元集合。
  • Python 支援使用成對的 單引號 或 雙引號。

舉一個小例子:

t1 = 'i love Python!'
print(t1, type(t1))
# i love Python! <class 'str'>

t2 = "I love Python!"
print(t2, type(t2))
# I love Python! <class 'str'>

print(5 + 8)  # 13
print('5' + '8')  # 58

Python

中的字串操作相比於其他語言中的字串操作要簡單易懂一點。

Python 的常用轉義字元:

aca12dd3acaee2b63567b0d46a4f1683.png

這些和其他語言中的語法大致一致,這裡便不再多說,只再強調一個“原始字串”的概念。

# 【例子】原始字串只需要在字串前邊加一個英文字母 r 即可。
print(r'C:Program FilesIntelWifiHelp') # 原本字串中有很多符號容易導致歧義,但是加上 r 表示原始字串後就能相對簡單地解決這個問題。

# 執行結果:  
# C:Program FilesIntelWifiHelp

在對換行有特別需要的時候,為了程式碼書寫的簡潔,可以使用 ''' ''' 或 """ """的形式來寫字串。

# 例子:

para_str = """這是一個多行字串的例項
多行字串可以使用製表符
TAB ( t )。
也可以使用換行符 [ n ]。
"""
print(para_str)


# 執行結果:
# 這是一個多行字串的例項
# 多行字串可以使用製表符
# TAB (    )。
# 也可以使用換行符 [
#  ]。

2. 字串的切片與拼接

  • 類似於元組具有不可修改性
  • 從 0 開始 (和 Java 一樣)
  • 切片通常寫成 start:end 這種形式,包括「start 索引」對應的元素,不包括「end索引」對應的元素。
  • 索引值可正可負,正索引從 0 開始,從左往右;負索引從 -1 開始,從右往左。使用負數索引時,會從最後一個元素開始計數。最後一個元素的位置編號是 -1。

總而言之這些有序列的資料的切片操作幾乎一致,便只舉一個例子不再細談。

# 例子:

str1 = 'I Love LsgoGroup'
print(str1[:6])  # I Love
print(str1[5])  # e
print(str1[:6] + " 插入的字串 " + str1[6:])  
# I Love 插入的字串  LsgoGroup

s = 'Python'
print(s)  # Python
print(s[2:4])  # th
print(s[-5:-2])  # yth
print(s[2])  # t
print(s[-1])  # n

3. 字串的常用內建方法

這裡給出常用的字串的內建方法,在這裡就不再細談,根據需要查閱便是。

capitalize() 將字串的第一個字元轉換為大寫。 lower() 轉換字串中所有大寫字元為小寫。 upper() 轉換字串中的小寫字母為大寫。 swapcase() 將字串中大寫轉換為小寫,小寫轉換為大寫。 count(str, beg= 0,end=len(string)) 返回 str在 string 裡面出現的次數,如果 beg或者 end指定則返回指定範圍內 str出現的次數。 endswith(suffix, beg=0, end=len(string)) 檢查字串是否以指定子字串 suffix 結束,如果是,返回 True,否則返回 False。如果 begend 指定值,則在指定範圍內檢查。 startswith(substr, beg=0,end=len(string)) 檢查字串是否以指定子字串 substr 開頭,如果是,返回 True,否則返回 False。如果 begend 指定值,則在指定範圍內檢查。 find(str, beg=0, end=len(string)) 檢測 str 是否包含在字串中,如果指定範圍 begend,則檢查是否包含在指定範圍內,如果包含,返回開始的索引值,否則返回 -1。 rfind(str, beg=0,end=len(string)) 類似於 find() 函式,不過是從右邊開始查詢。 isnumeric() 如果字串中只包含數字字元,則返回 True,否則返回 False。 ljust(width[, fillchar])返回一個原字串左對齊,並使用 fillchar(預設空格)填充至長度 width的新字串。 rjust(width[, fillchar])返回一個原字串右對齊,並使用 fillchar(預設空格)填充至長度 width的新字串。 replace(old, new [, max]) 把 將字串中的 old替換成 new,如果 max指定,則替換不超過 max次。 split(str="", num) 不帶引數預設是以空格為分隔符切片字串,如果 num引數有設定,則僅分隔 num個子字串,返回切片後的子字串拼接的列表。 splitlines([keepends]) 按照行('r', 'rn', n')分隔,返回一個包含各行作為元素的列表,如果引數 keepends為 False,不包含換行符,如果為 True,則保留換行符。 maketrans(intab, outtab) 建立字元對映的轉換表,第一個引數是字串,表示需要轉換的字元,第二個引數也是字串表示轉換的目標。 translate(table, deletechars="") 根據引數 table給出的表,轉換字串的字元,要過濾掉的字元放到 deletechars引數中。

4. 字串格式化

字串的格式化輸出幾乎是所有語言的重點,但所幸並非難點。和其他語言一樣,Python中的格式化輸出也有常用寫法:

name = '小明'
age = 10

print("我叫 %s 今年 %d 歲!" % (name, age))  

# 執行結果:
# 我叫 小明 今年 10 歲!

常規寫法如此,但是Python中還有一種寫法——Python中有format()格式化函式,一定程度上減輕了開發者的記憶負擔。

我就直接拿上面的例子修改了:

name = '小明'
age = 10

print("我叫 {} 今年 {} 歲!".format(name, age))  

# 執行結果:
# 我叫 小明 今年 10 歲!

這樣以來,就不必再去強記複雜的格式化符號了。

補充:

1606c947029ae496d145d0dad56c9477.png

字典

1. 可變型別與不可變型別

  • 序列是以連續的整數為索引,與此不同的是,字典以"關鍵字"為索引,關鍵字可以是任意不可變型別,通常用字串或數值。
  • 字典是 Python 唯一的一個 對映型別,字串、元組、列表屬於序列型別

那麼如何快速判斷一個數據型別 X 是不是可變型別的呢?兩種方法:

  • 麻煩方法:用 id(X) 函式,對 X 進行某種操作,比較操作前後的 id,如果不一樣,則 X 不可變,如果一樣,則 X 可變。
  • 便捷方法:用 hash(X),只要不報錯,證明 X 可被雜湊,即不可變,反過來不可被雜湊,即可變。
# 使用id()方法

i = 1
print(id(i))  # 140732167000896
i = i + 2
print(id(i))  # 140732167000960

l = [1, 2]
print(id(l))  # 4300825160
l.append('Python')
print(id(l))  # 4300825160
# 使用雜湊方法:

print(hash('Name'))  # 7047218704141848153 # 即不可變

print(hash((1, 2, 'Python')))  # 1704535747474881831 # 即不可變

print(hash([1, 2, 'Python']))

# 不可被雜湊,即可變
# TypeError: unhashable type: 'list'

總結:

  1. 數值、字元和元組 都能被雜湊,因此它們是不可變型別。
  2. 列表、集合、字典不能被雜湊,因此它是可變型別。

2. 字典的定義

字典 是 無序的 鍵:值( key:value)對集合,鍵必須是互不相同的(在同一個字典之內)。
  • dict 內部存放的順序和 key 放入的順序是沒有關係的。
  • dict 查詢和插入的速度極快,不會隨著 key 的增加而增加,但是需要佔用大量的記憶體。
字典 定義語法為 {元素1, 元素2, ..., 元素n}
  • 其中每一個元素是一個「鍵值對」-- 鍵:值 (key:value)
  • 關鍵點是「大括號 {}」,「逗號 ,」和「冒號 :」
  • 大括號 -- 把所有元素綁在一起
  • 逗號 -- 將每個鍵值對分開
  • 冒號 -- 將鍵和值分開

3. 建立和訪問字典

使用大括號{}可以建立字典,如下:

dic = {'李寧': '一切皆有可能', '耐克': 'Just do it', '阿迪達斯': 'Impossible is nothing'}
print('耐克的口號是:', dic['耐克'])  

# 執行結果:
# 耐克的口號是: Just do it

看如上程式碼的dic['耐克'],是不是從感覺上就覺得有些像使用索引值來訪問列表、元組?只不過在這裡中括號內的不再是索引值,而是對應的“鍵”。這也從另一個角度說明了上文中提到的“字典是無序的”(沒看到的建議往上翻翻再看一遍定義)

注意:如果我們取的鍵在字典中不存在,會直接報錯KeyError

鍵所對應的值也是可以被覆蓋/修改的,看如下程式碼:

dic = dict()
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3

print(dic)
# {'a': 1, 'b': 2, 'c': 3}

dic['a'] = 11
print(dic)
# {'a': 11, 'b': 2, 'c': 3}

字典的不同寫法:

  • dict(mapping) new dictionary initialized from a mapping object's (key, value) pairs
# 例子:

dic1 = dict([('apple', 4139), ('peach', 4127), ('cherry', 4098)])
print(dic1)  # {'cherry': 4098, 'apple': 4139, 'peach': 4127}
​
dic2 = dict((('apple', 4139), ('peach', 4127), ('cherry', 4098)))
print(dic2)  # {'peach': 4127, 'cherry': 4098, 'apple': 4139}
  • dict(**kwargs) -> new dictionary initialized with the name=value pairs in the keyword argument list. For example: dict(one=1, two=2)
#  例子:這種情況下,鍵只能為字串型別,並且建立的時候字串不能加引號,加上就會直接報語法錯誤。
dic = dict(name='Tom', age=10)
print(dic)  # {'name': 'Tom', 'age': 10}
print(type(dic))  # <class 'dict'>

4. 字典的內建方法

老規矩,不強記,根據需求查:

dict.fromkeys(seq[, value]) 用於建立一個新字典,以序列 seq 中元素做字典的鍵, value 為字典所有鍵對應的初始值。 dict.keys()返回一個可迭代物件,可以使用 list() 來轉換為列表,列表為字典中的所有鍵。 dict.values()返回一個迭代器,可以使用 list() 來轉換為列表,列表為字典中的所有值。 dict.items()以列表返回可遍歷的 (鍵, 值) 元組陣列。 dict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回預設值。 dict.setdefault(key, default=None)get()方法 類似, 如果鍵不存在於字典中,將會新增鍵並將值設為預設值。 key in dict in 操作符用於判斷鍵是否存在於字典中,如果鍵在字典 dict 裡返回 true,否則返回 false。而 not in操作符剛好相反,如果鍵在字典 dict 裡返回 false,否則返回 truedict.pop(key[,default])刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。 key 值必須給出。若 key不存在,則返回 default 值。 del dict[key] 刪除字典給定鍵 key 所對應的值。 dict.popitem()隨機返回並刪除字典中的一對鍵和值,如果字典已經為空,卻呼叫了此方法,就報出KeyError異常。 dict.clear()用於刪除字典內所有元素。 dict.copy()返回一個字典的淺複製。 dict.update(dict2)把字典引數 dict2key:value對 更新到字典 dict 裡。