002_第一部分_[字典 / 列表解析 / 字符串操做 / STR與BYTES的區別 ]

一.字典:

定義字典:
d = {}
d = dict()
d = {"a":1, "b":2}html

1.獲取元素:

d['a']
d.get('a')
>這兩個的區別,用get在key不存在的時候不會拋出Error;

d.get('a', 'information')   //設置當key不存在的時候返回的內容;

2.增長和修改元素:

d['a'] = 3   //修改和增長元素的方法都是這個

3.刪除元素:

d.pop('c')  //刪除的同時返回刪除的內容
>若是刪除不存在的key會報KeyError,這個時候就須要給定返回值

d.pop('c', 'information')
help(d.pop)

>這樣返回的就是information,不會報KeyError錯誤;

d.popitem()    //從字典中隨機刪除一個;

利用關鍵字del 刪除,del 能夠刪除一個變量 同時也能夠用來刪除字典:
del d['a']

4.遍歷:

>[生成一個生成器,能夠進行迭代操做][字典是無序的,因此返回的迭代對象也是無序的]

d.items()  生成器中是一個元組的列表
d.values()  
d.keys()    
    for i in d.keys()

    d = {}
    d['root'] = 'root'
    d['root']['left'] = 'left'
    d['root']['right'] = 'right'
    d  //生成一個二叉樹

二.列表解析:

  • 列表解析是Python重要的語法糖python

  • 列表解析的速度比for in 迭代 快正則表達式

基本語法:

ret = [expression for item in iterator]
    ret = [expression for item in iterator if iterator >=1 and iterator != 7 ] 
    ret = [expression for x in X for y in Y]   //返回的是一個笛卡爾積,至關於兩個嵌套的for循環

    等價於
    ret = []
    for item in iterator:
        ret.append(expression)

例子1:
    lst = list(range(10))
    [x + 1 for x in lst]

    import timeit
    def fn1():

    timeit.timeit(fn1())   //查看函數執行須要的時間

例子2:
    帶條件的列表解析:
    lst = list(range(10))
    [x + 1 for x in lst if x % 2 == 0]   //輸出奇數

    [x + 1 for x in lst if x % 2 == 0 and x > 2 ]   //兩個條件

例子3:
    l1 = [1, 3, 5, 7, 9]
    l2 = [0, 2, 4, 6, 8]
    [(x,y) for x in l1 for y in l2]
    [(1, 0-8)        //每一個l1的值 x 都會循環一遍l2
      (3,0-8 )
     (5, 0-8)
    ]

三.集合解析:

**集合解析中獲得的元素只能有一個**
ret = {expression for item in iterator}

例子1:
     s = [1, 3, 5, 5] 
    {x + 1 for x in s}
    {2, 4, 6}

四.字典解析:

ret = {exprK:exprV for item in iterator}

例子1:
    d = {'a':1, 'b':2}
    {k, v for k, v in d.items()}

例子2:
    {k:v for k, v in [('a',1), ('b', 2)]}
    {'a':1, 'b':2}

五.字符串與文本操做:

python2 和python3最大的差異就是在於字符串
python2中字符串是byte的有序序列
python3中字符串是unicode的有序序列
字符串是不可變的
字符串支持下標和切片shell

1.字符串的切片操做:

t = 'asdfzxv'     //前面是閉區間,從0開始,後面是開區間
t[1]
t[-1]
t[0:]
t[:]
t[1:-1]

2.字符串格式化:

1.使用 % 來格式化

'i love %s' % ('python',)
'i love %(name)s' % {'name':'python'}
'i love %(name)s %(name)s' % {'name':'python'}   //當有多個重複使用的值,可使用字典的方式
'i love %s ,%s' % ('python', 'python')  //進行多個不一樣數值的格式化

FLAG
flag |說明 |實例                                        輸出:
n    n表示一個數字       '%3s' % ('a', )                     '  a'    //在a前面會有兩個空格
0    使用0填充,僅適用與數字  '%03d' % (1, )          '001'
.     是有那個空格填充,默認行爲  '%.3d' % (1, )      '  1'  //在1前面以空格填充
  • 右邊使用空格填充 '%-3d' % (1, ) '1 ' //在1後面以兩個空格填充express

  • 填充以前加'+' 僅對於正數 '%+03d' % (1, ) '+01' //在1前面填充0,增長正數標記符json

    CONVERSION
    符號 說明api

  1. 整數bash

  2. 整數app

  3. 八進制整數socket

  4. 小寫十六進制整數
    X 大寫十六進制整數

  5. 浮點數
    F 浮點數

  6. 小寫科學計數法
    E 大寫科學計數法

  7. 整數, 已廢棄

  8. 同f,若是指數小於-4,同e
    G 同f,若是指數小於-4,同E

  9. 字符,接收unicode編碼或單字符字符串

  10. 字符串,使用ascii函數轉換

  11. 字符串,使用repr函數轉換

  12. 字符串,使用str函數轉換

    例子1:
    '%d' % 3.4
    > 3

2.使用format方法格式化:

https://docs.python.org/3.4/library/stdtypes.html?highlight=format#str.format
template format(args, *kwargs) (1) (2) (3) (4)

1.template 使用 {} 標示變量
2.{}或{\d+} 使用 *args 按順序填充
3.{key} 使用 **kwargs 按 key 填充
4.Format String Syntax

例子1:
'{0}, {name}'.format('hello',name='world')

3.字符串經常使用操做 [重點] :

字符串鏈接join
字符串分割split, rsplit, splitlines, partition, rpartition
字符串修改-大小寫 capitalize, title, lower, upper, swapcase
字符串修改-填充清除 center, ljust, rjust, zfill, strip, rstrip,lstrip
字符串判斷 startswith, endswith,is*
字符串查找替換 count, find, rfind, index, rindex, replace

1.join[字符串鏈接]:

lst = ['i', 'like', 'python']
    ' '.join(lst)
    '_'.join(lst)
    ret = ''
    for i in lst:
          ret += i
          ret += ' '
    ret

2.split - rsplit - splitlines[分割]:

內置函數split是不支持正則表達式的,須要先import re模塊;
    help(str.split)
    S.split(sep=None, maxsplit=-1) 
    
    例子1:
    s='i like python'
    s.split()
    ['i', 'like', 'python']

    例子2:
    s.split('o')      //指定的分割符不會被保留;
    >['i like pyth', 'n'] 
    
    例子3:
    s.split(' ', 1)  //後面的數表示分割幾回,默認是最大分割, -1表示從後開始分割
    ssplit(' ', -1)
    這裏可使用UNPACKING:
    s = 'root:x:0:0:root:/root:/bin/bash'
    username,_ = s.plit(':', 1)
    username
    > 'root'

    例子4:
    s = 'root\n:x:0\n:0\n:root:/root:/bin/bash'   //按照換行符分割
    s = '''                  //像這樣須要多行的且須要按行分割的就須要用到splitlines
    11111111          //這裏總共是4行,按照換行符算,第一行也有換行符
    22222222
    33333333
    '''
    s.splitlines()
    > ['root', ':x:0', ':0', ':root:/root:/bin/bash']
    s.splitlines(True)   //填寫True將會保留換行符,默認False

3.partition - rpartition[分割]:

s = 'root\n:x:0\n:0\n:root:/root:/bin/bash'
    s.partition(':')         //partition會按照順序 將分隔符單獨分割成一個元素,
    >('root', ':', 'x:0:0:root:/root:/bin/bash')

4.capitalize - title - lower - upper - swapcase[修改 大小寫]:

capilize :   第一個字母變大寫,其餘字母變小寫
       title:   每一個單詞的首字母大寫,其餘字母變小寫
    lower:   將全部字母變小寫
    upper:   將全部字母變大寫

swapcase: 將大小寫對換;

5.center - ljust - rjust - zfill - strip - rstrip - lstrip [修改 字母]:

center: 先後填充

s.center(20)   //默認用空格進行先後填充,填充滿20個字符
            s.center(20,'#') //以'#'進行先後填充.

 ljust:     填充向左邊
            s.ljust(20,'#')  #號將會填充在原來字符串的右邊,由於是向左填充

 rjust:     填充向右邊
            與ljust方向相反;

   zfill:    zfill() 方法返回指定長度的字符串,原字符串右對齊,前面填充0
            str.zfill(width)

 strip:    刪除頭尾匹配符,默認刪除換行符和空格,tab鍵
rstrip:    刪除結尾匹配符
lstrip:    刪除開頭匹配符

            f = open('/etc/passwd', 'r')
            f.readline()   //返回的一行帶有換行符
            f.readline().strip()  //這樣將不會帶上換行符

6.startswith - endswith - is *[判斷]:

for line in f.readlines():
                    line = line.strip()
                    if line.startwith('root:'):
                        _, shell = line.rsplit(":",1)
                        print(shell)

7.count, find, rfind, index, rindex, replace[查找 和 替換]:

f = 'sdfsdfsdfsadfsdf'
        f.count('r')  //統計有多少個r,若是是多個字符就是多個字符進行匹配統計
        
        f.find('fs')      //從左開始查找第一次匹配到的位置; 找不到會返回 -1
        f.find('fs', 2, 4)  //設置 [開始] [結束] 位置
        f.index('fs')     //從左開始查找第一次匹配到的位置;找不到會返回ValueError

        f.replace('fs','pp')     //替換   將fs替換成pp
        f.replace('fs','pp', 2)  //從左向右進行替換,替換兩個;

六.STR與BYTES的區別:

Python3中嚴格區分了文本和二進制數據
Python2並無嚴格區分
文本數據使用str類型,底層實現是unicode
二進制數據使用bytes類型,底層是byte
str使用encode方法轉化爲bytes
bytes方法使用decode方法轉化成str
因爲清晰的區分文本和二進制,Python3解決了大多數python2的編碼問題

python3 中json的應用:

import json
   json.loads('{"name":"comyn"}')

socket中的發送信息;須要將str轉換成bytes才能發送;
s.send('{"name":"comyn"}'.encode())
相關文章
相關標籤/搜索