1. 程式人生 > 其它 >python基礎——2.字串,列表,元組,字典,集合,深淺拷貝

python基礎——2.字串,列表,元組,字典,集合,深淺拷貝

一.字串
1.字串的索引和切片
[0::1]
[::-1]
[-1::]
2.字串的部分方法
s.capitelize() #首字母大寫
s.title() #中間用空格或者特殊字元隔開的首字母都大寫
s.lower() #a-z全部小寫
s.casefold() #非英文也可以小寫,python3引入
s.upper() #全大寫
s.swapcase() #大小寫反轉
s.ljust(int,任意字元) #左對齊 rjust右對齊
s.center(int,任意字元) #中間對齊
s.expandtabs() #中間有\t置換成8位空格
len(s) #計算長度
s.count("x") #計算元素次數
s.find("x") #是否有x元素,預設返回第一個的索引,找不到返回-1;有rfind
s.endswith("x") #是否以什麼結尾,可("xx",初始下標,結束下標)
s.startswith("x") #遵循顧頭不顧尾,否則報錯
s.index("x") #通過元素找索引,找不到報錯
s.strip() #去掉元素前後的空格,括號裡可以加元素.有空格,元素去不掉
s.split() #切割;什麼都不加,直接轉單一元素表;加空字串報錯
s.splitlines() #按行(\r\rn\n)分割.如果引數keepends為False,不包含換行符
s.replace() #(old,new,count)不寫次數預設全替換,替換的元素不能是Int
s.isspace() #是否空格
s.isalnum() #是否數字字母
s.isalpha() #是否字母
s.isdigit() #是否數字
s.isdecimal() #是否十進位制字元,只存在於unicode物件.(定義十進位制字串,需在字串前加'u')
s.isnumeric() #是否數字組成,只針對unicode物件.

3.字串是不可變資料型別

二.列表
1.列表是可變資料型別
2.列表不僅可存放不同型別資料,還可存放大量資料.32位5億,64位1152921504606846975
3.建立列表的幾種方式
lis = list() # 只能建立空列表
lis = list([])
lis = []
lis = list(range())
lis = list("abcdefg")

4.列表的增刪改查
    lis.append()                 # 將元素新增到列表尾部
    lis.extend()                 # 將所有元素迭代追加到列表中
    lis.insert(index,object)     # 將元素插入指定下標
    以上列印返回none;列印元列表有變;append效率高於insert

    lis.pop(index)               # 刪除給定位置元素,返回刪掉元素;預設刪最後一個
    lis.remove(object)           # 刪除列表中第一次出現的給定元素;不存在預設
    lis.clear()                  # 清空
    del lis[index]               # 可以切片刪

    lis[index] = object          # 替換元素,可以切片,迭代的替換

    lis.index(object)            # 返回元素出現第一個下標
    lis.count(object)            # 元素出現次數

5.列表的切片和排序(列表裡同時有str和int不能排序)
    lis.reverse()                   # 將元素中列表倒序
    lis.sort()                      # 升序排序
    lis.sort(reverse=True)          # 降序排序

    lis = sorted(lis, key=object)     # 建立排序後的列表
       # def func(name):
            return len(name)
         lis = sorted(lis, key=func)
       # lis = sorted(lis, key=lambda name:(len(name)))

    # 注意:sort和sorted都可以加引數key
           sort和reverse是list自帶的方法
           sorted和reversed是內建函式
           sorted返回的是新列表,reversed返回的是迭代器
           sort和reverse是作用在舊列表上

6.列表的三元表示式和列表推導式
    lis1 = [1, 2, 3, 4, 5]
    for i in lis1:
        lis2.append(i)
    lis2 = [i for i in lis1]
    # 列表直接賦值給新表的結果是修改原列表,新列表也會變
    lis = [i for i in range(30) if i % 3 == 0]
    lis3 = [j for i in lis for j in i if j.count("e") == 2]
    # 列表推導式的結果是一個generator 不加括號報錯,加中括號是將轉list,加小括號就是generator
    # 目前測試生成器generator可以直接加中括號強轉,iterator不能加中括號強轉
    # generator == []   iterator == list()

7.列表的複製
    1. lis2 = lis1 + []
    2. lis2 = [x for x in lis1]
8.將列表傳遞給函式時,由於列表是可變資料型別,所以列表的內容可能會在函式呼叫後改變

三.字典
1.字典是可變資料型別
2.字典是python中唯一對映資料型別
3.字典的特點是查詢效率高;儲存大量的關係型資料
4.通過Key查詢value,內部使用Key來計算一個記憶體地址
5.key是不可變資料型別 元組、bool、int、str
6.python3.5以前字典是無序的
7.建立字典的幾種方式以及zip用法
information_dic = {"name": "wg", "age": 33}
information_dic = dict([("name", "wg"), ("age", 33)])
information_dic = dict("name"=”wg“, age=33)
information_dic = dict(zip(lis1, lis2))
8.字典的增刪改查
information_dic["high"] = 185 # 有key修改value,沒有增加
information_dic.setdefault("weight", 122) # 有key不修改value,沒有增加
information_dic.update(information1) # 有key修改value,沒有增加
information_dic = {鍵: 值,}

    information_dic.get(key)                        # 是否有鍵,沒有返回none;括號中可以設定0,返回0
    information_dic.setdefault("鍵")                # 沒有返回None
    information_dic["鍵"]                           # 沒有就報錯
    information_dic.keys()                          # 查鍵,返回列表
    information_dic.values()                        # 查值,返回列表
    informaiton_dic.items()                         # 查鍵值對,返回元組
    for i in information (.keys,.values,.items)     # 什麼都不加返回鍵

    information_dic.pop(key, 設定返回值)              # 可以測試是否有鍵
    information_dic.popitem()                       # 隨機刪;3.6以後預設刪最後一個;返回鍵值對元組
    del information_dic[key]
    information.clear()                             # 清空

9.關於fromkeys的坑
    information_dic = dict.fromkeys()     # 新字典通過第1個引數迭代做k,第2個引數做值
        dict.fromkeys([], "")
    # 只改變一個值
    information_dic[key] = ""
    # 全改變
    dict.fromkeys([], [])
    information_dic[].append("")          # 所有鍵值對的id一樣
    # 這裡我們說是受是否可變資料型別影響應該

10.解構和解包
    a, b = 10, 20 == (10, 20) == [10, 20]     # 元組和列表都有這功能
    for item in dic.items():
        k,v = item
        print(k)
        print(v)
    #json長的就是字典樣式

11.字典推導式
    dic1 = {dic[k]: k for k in dic}

    dic = {"a": 1, "b": 2, "A": 3, "D": 4}
    # dic1 = {}
    # for k in dic:
    #     # dic1[k.lower()] = dic.get(k.upper(), 0) + dic.get(k.lower(), 0)
    #     dic1.setdefault(k.lower(), dic.get(k.upper(), 0) + dic.get(k.lower(), 0))
    # print(dic1)
    dic2 = {k.lower(): dic.get(k.upper(), 0) + dic.get(k.lower(), 0) for k in dic}
    print(dic2)

12.提取單一元素字典key,value的方法
    # d = {'name':'haohao'}
    # (k, v), = d.items()
    # print(k)
    #
    # d = {'name':'haohao'}
    # k = list(d)[0]
    # v = list(d.values())[0]
    # print(k)
    #
    # d = {'name':'haohao'}
    # k, = d
    # v, = d.values()
    # print(k)

四.元組
1.元組不可變資料型別;元組的元素可變(孫子),根據資料型別決定;
2.元組是不可變的列表,只讀列表,有索引,可查詢,可迴圈,可切片
3.元組只有一個元素的時候要加逗號,否則type不是元組;空元組用tuple()表示
4.元組的增刪改查
tup = tup1 + tup2 # 元組不支援修改,可以連線組合方式增加
tup = tup * x
del tup # 元組不支援刪除單個元素,可以刪整個
tup = tup[0], tup[1] # 元組不能修改元組元素,可以通過拼接構造一個新元組
tup[index]
tup[index1:index2] # 可查詢可切片

五.集合
1.集合是可變資料型別;它裡邊的元素必須是不可變資料型別
2.set就是不存value的字典,只存key
3.set中的元素是不能重複的,無序的,可雜湊的;因為無序,所以沒有索引
4.雜湊的特點就是雜湊,所以set內部是無序的.
5.s = set() 空集合
6.建立set的幾種方式
set = ({})
set = {}
set = set({})

7.set的增刪改查
    set.add()       # 正常增加
    set.update()    # 迭代新增,如果加的是字串,則拆分字串
    for i in set    # 隨機刷資料
    set.pop()       # 隨機刪,不要新增元素
    set.remove()    # 按元素刪 如果元素不存在,報錯
    set.clear()     # 清空集合  列印集合得到的結果是set()

8.交集並集反交集...
    set1&set2                       # 得到交集
    set1.intersection(set2)         # 同樣的到交集
    set1^set2                       # 得到差集
    set1.symmetric_difference(set2) # 同上
    set1-set2                       # 得到set1獨有差集
    set.difference(set2)            # 同上
    set1 < set2                     # 說明set1是set2子集
    set1.issubset(set2)

9.frozenset凍結集合,它是不可變的,存在雜湊值,好處是可以作為字典的Key,也可作為其他集合的元素.缺點是建立不能修改,沒有add,remove方法.
    s = frozenset("barry")
    print(s, type(s))

10.操作小技巧
    set1 -= set2("")                # 直接刪掉字串拆分後的內容
    set("posh") == set("shop")
    set1 | set2                     # 合併集合
    set.discard(obj)                # 這個方法刪除,如果元素不存在不報錯,返回none

11.集合推導式
    s = {x**2 for x in [1, -1, 2]}

六.總結
1.不可變資料型別:元組、bool、int、str
可變資料型別:列表、字典、集合
當該資料型別的對應變數值發生改變,那麼它對應的記憶體地址也會改變,不可變資料型別

2.元組是隻讀列表;集合是不存value的字典;元組的元素是可變的,集合的元素是不可變的;

七.深淺拷貝
淺拷貝就是修改其中一個數據,必然影響另一個數據
深拷貝需要用copy模組