Python基礎03-基本數據類型


基本數據類型

Python基本的數據類型包含6種,分別是:

  • 數字:包含整形int、浮點型float、布爾型True/False、復數型complex,不可變類型
  • 字符串:str,序列型,用於存儲一行字符串或一段文本,不可變類型
  • 列表:list,序列型,用於存儲多個變量,可變類型
  • 元祖:tuple,序列型,用於多個變量表達一個固定組合,不可變類型
  • 集合:set,映射型,用於存儲多個無序不重復變量,可變類型
  • 字典:dict,映射型、用於存儲鍵值對,可變類型

注:另外還有一種NoneType類型,即None,無值

數字

數字類型包含包含整形int、浮點型float、布爾型True/False、復數型complex,是一種不可變類型。

種類

  1. 整型int:如1、12、9999999,Python3中int長度幾乎沒有限制。
  2. 浮點型float:如1.0、99.99
  3. 布爾型bool
    • False:即假,常用與邏輯判斷,除False外,Python中的零0、字符串零'0'、浮點數0.0、空字符串''、空列表[]、空元組()、空集合{}在邏輯判斷時都被認為是False。
    • True:即真,除False和上述邏輯判斷時被認為False的值以外,都被視為True。
  4. 復數型complex

注:[''][[],[]]由於不是空列表,在邏輯判斷時被認為是True。

操作符

  • +:加
  • -:減
  • *:乘
  • /:除,結果為浮點數,如1/2=0.5,又稱真實除
  • //:整除,舍去所有小數,又稱地板除
  • %:取模,如3 % 2 = 1
  • **:乘方,如3 ** 2 = 9

類型轉換

  • str(): 其他類型轉為字符串, 如str(12)
  • int():字符串整數或浮點數轉為整型,如int("12")
  • float():字符串數字或整形,轉換為浮點數,如float("1.23")

注:字符串形式的浮點數,如'1.23',只能使用float轉為浮點數,用int轉為整數則會報錯。

進制轉換

Python中的數字除了10進制數之外,還支持2進制(表示為0b開頭)、8進制(表示為0o開頭)、16進制數(表示為0x開頭)。相互轉換方法如下:

  • bin():轉為2進制,如bin(10),結果為0b1010
  • oct():轉為8進制,如oct(10),結果為0o12
  • hex():轉為16進制,如hex(10),結果為0xa
  • int():轉為10進制,如int(0b1010)結果為10

字符串

字符串系統方法

方法 說明 示例
len() 計算字符串長度 len("abcdefg"),結果為7
count() 查詢字符串中某個元素的數量 aabcabc".count("a"),結果為3
find() / index() 查找字符串中某個字符第一次出現的索引,find()找不到返回-1 , index()找不到報錯 "abcdefg".find("b"),結果為1 , ”abcdefg".index("b"),結果也為1
replace() 替換字符串中的某部分 "hello,java".replace("java", "python"),結果為hello,python
split() 將字符串按分隔符分割成列表 "a,b,c,d".split(","),結果為["a", "b", "c", "d"]
join() 將字符串作為分隔符連接列表元素得到一個字符串 "-".join(["a", "b", "c", "d"]),結果為a-b-c-d
lower() / upper() 將字符串轉換為全小寫/大寫 "AbcdeF".lower(),結果為abcdef , "abcedF".upper(),結果也為ABCDEF
isdigit() / isalpha() / isalnum() 字符串是否純數字/純字母/純數字字母組合 "123".isdigit(),結果為True
strip() / lstrip() / rstrip() 去掉字符串左右/左邊/右邊的無意字符(包括空格、換行等非顯示字符) " this has blanks \n".strip(),結果為this has balnks

字符串格式化

字符串格式化是指,將字符串的某部分按一定格式輸出,同時也可以將某些變量的實際值,插入到字符串中。

  • %: 如"Name: %s, Age: %d" % ("Lily", 12)"Name: %(name)s, Age: %(age)d" % {"name": "Lily", "age": 12}
  • format: 如"Name: {}, Age: {}".format("Lily", 12)"Name: {name}, Age: {age}".format(name="Lily",age=12)
  • fstring:
  • substitude(不完全替換會報錯)/safe_substitude: 如"Name: ${name}, Age: ${age}".safe_substitude(name="Lily",age=12)

示例: 利用format生成自定義html報告

    tpl='''<html>
    <head><title>{title}</title></head>
    <body>
    <h1>{title}</h1>
    <table border=1px>
        <tr>
            <th>序號</th>
            <th>用例</th>
            <th>結果</th>
        </tr>
        {trs}
    </table>
    </body>
    </html>
    '''

    tr='''<tr><td>{sn}</td>
    <td>{case_name}</td>
    <td>{result}</td>
    '''

    title="自動化測試報告"
    case_results = [("1", "test_add_normal", "PASS"),("2", "test_add_negative", "PASS"), ("3", "test_add_float", "FAIL")]

    trs=''
    for case_result in case_results:
        tr_format = tr.format(sn=case_result[0], case_name=case_result[1], result=case_result[2])
        trs += tr_format

    html = tpl.format(title=title, trs=trs)

    f = open("report.html", "w")
    f.write(html)
    f.close()

結果預覽:

自動化測試報告

序號 用例 結果
1 test_add_normal PASS
2 test_add_negative PASS
3 test_add_float FAIL

列表 list

列表元素支持各種對象的混合,支持嵌套各種對象,如["a", 1, {"b": 3}, [1,2,3]]

  1. 列表操作
  • 賦值: l = [1, "hello", ("a", "b")]
  • 獲取: a = l[0] # 通過索引獲取
  • 增: l.append("c");l.extend(["d","e"]);l+["f"]
  • 刪: l.pop() # 按索引刪除,無參數默認刪除最后一個;l.remove("c") # 按元素刪除
  • 改:l[1]="HELLO" # 通過索引修改
  • 查: 遍歷 for i in l: print(i)
  1. 列表系統方法
    • append()/insert()/extend(): 添加/插入/擴展(連接)
    • index(): 獲取元素索引
    • count(): 統計元素個數
    • pop()/remove(): 按索引/元素刪除
    • sort()/reverse(): 排序/反轉
    • 案例: 字符串反轉s="abcdefg"; r=''.join(reversed(a))

元組 tuple

  1. 不可改變,常用作函數參數(安全性好)
  2. 同樣支持混合元素以及嵌套
  3. 只有一個元素時,必須加","號,如a=("hello",) - 因為Python中()還有分組的含義,不加","會識別為字符串

字符串/列表/元組統稱為序列, 有相似的結構和操作方法

序列相關操作方法

1. 索引
- 正反索引: `l[3];l[-1]`
- 索引溢出(IndexError): 當索引大於序列的最大索引時會報錯,如[1,2,3,4]最大索引是3,引用l[4]會報IndexError
  1. 切片

    • l[1:3] # 從列表索引1到索引3(不包含索引3)進行截取, 如 l = [1, 2, 3, 4, 5], l[1:3]為[2, 3]
    • l[:5:2] # 第一個表示開始索引(留空0), 第二個表示結束索引(留空為最后一個,即-1), 第三個是步長, 即從開頭到第5個(不包含第5個),跳一個取一個
    • 案例: 字符串反轉 s="abcdefg";r=s[::-1]
  2. 遍歷

    • 按元素遍歷: for item in l: print(item)
    • 按索引遍歷: for index in range(len(l)): print(l[index])
    • 按枚舉遍歷: for i,v in enumerate(l): print((i,v))
  3. 擴展/連接(添加多個元素): extend()/+ "abc"+"123";[1,2,3]+[4,5];[1,2,3].extend([4,5,6,7])

  4. 類型互轉: str()/list()/tuple()

list轉str一般用join(), str轉list一般用split()

  1. 系統函數
  • len(): 計算長度
  • max()/min(): 求最大/最小元素
  • sorted()/reversed(): 排序/反轉並生成新序列(sort()/reverse()直接操作原序列)l_new=sorted(l);l_new2=reversed(l)

集合 set

  1. 集合可以通過序列生成a = set([1,2,3])
  2. 集合無序,元素不重復(所有元素為可哈希元素)
  3. 集合分為可變集合set和不可變集合frozenset
  4. 操作方法: 聯合|,交集&,差集-,對稱差分^
  5. 系統函數: add()/update()/remove()/discard()/pop()/clear()
  6. 案例1: 列表去重: l=[1,2,3,1,4,3,2,5,6,2];l=list(set(l)) (由於集合無序,無法保持原有順序)
  7. 案例2: 100w條數據,用列表和集合哪個性能更好? - 集合性能要遠遠優於列表, 集合是基於哈希的, 無論有多少元素,查找元素永遠只需要一步操作, 而列表長度多次就可能需要操作多少次(比如元素在列表最后一個位置)

字典 dict

  1. 字典是由若干key-value對組成, Python3.6后字典是有序的, 字典的key不能重復,而且必須是可哈希的,通常是字符串
  2. 字典操作
  • 賦值: d = {"a":1, "b":2}
  • 獲取: a = d['a']a = d.get("a") # d中不存在"a"元素時不會報錯
  • 增: d["c"] = 3; d.update({"d":5, "e": 6}
  • 刪: d.pop("d");d.clear() # 清空
  • 查: d.has_key("c")
  • 遍歷:
    • 遍歷key: for key in d:for key in d.keys():
    • 遍歷value: for value in d.values():
    • 遍歷key-value對: for item in d.items():
  1. 案例: 更新接口參數 api = {"url": "/api/user/login": data: {"username": "張三", "password": "123456"}},將username修改為"李四"
    api['data']['username'] = "李四"api['data'].update({"username": "李四"})

哈希與可哈希元素

  1. 哈希是通過計算得到元素的存儲地址(映射), 這就要求不同長度的元素都能計算出地址,相同元素每次計算出的地址都一樣, 不同元素計算的地址必須唯一, 基於哈希的查找永遠只需要一步操作, 計算一下得到元素相應的地址, 不需要向序列那樣遍歷, 所以性能較好
  2. 可哈希元素: 為了保證每次計算出的地址相同, 要求元素長度是固定的, 如數字/字符串/只包含數字,字符串的元組, 這些都是可哈希元素

6種類型簡單的特點總結

不可變類型:數字/字符串/元祖/frozen set
可變類型:列表、集合、字典

有序類型:序列(字符串/列表/元祖)及字典(Python3.6后默認按鍵值插入順序有序)
無需類型:集合


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM