zoukankan      html  css  js  c++  java
  • (一)python语法之数据结构

    1.字符串

    大小写

    # 全部大写
    print('Hello'.upper())      # HELLO
    
    # 全部小写
    print('Hello'.lower())      # hello
    
    # 大小写互换
    print('Hello'.swapcase())   # hELLO     
    
    # 首字母大写,其余小写
    print('hELLO'.capitalize()) # Hello
    

    去空格

    # 去两边空格
    print(' Hello '.strip())    # 'Hello'
    
    # 去左边空格        
    print(' Hello '.lstrip())   # 'Hello '        
    
    # 去右边空格
    print(' Hello '.rstrip())   # ' Hello' 
    
    # 去两边所有指定的字符       
    print('Hello'.strip('Ho'))  # 'ell'        
    
    # 去左边所有指定的字符
    print('Hello'.lstrip('lo')) # 'Hello'    
    
    # 去右边所有指定的字符    
    print('Hello'.rstrip('lo')) # 'He'
    

    对齐

    # 固定长度右对齐,左边不够用空格补齐
    print('Hello'.rjust(7))  # '  Hello'
    
    # 固定长度左对齐,右边不够用空格补齐
    print('Hello'.ljust(7))  # 'Hello  '
    
    # 固定长度居中对齐,两边不够用空格补齐   
    print('Hello'.center(7)) # ' Hello ' 
    
    # 固定长度右对齐,左边不够用0补齐 
    print('Hello'.zfill(7))  # '00Hello'
    

    判断

    # 是否以'He'开头,可传元组
    print('Hello'.startswith('He')) # True     
    
    # 是否以'lo'结尾
    print('Hello'.endswith('lo'))   # True  
    
    # 是否全为字母或数字
    print('Hello123'.isalnum())     # True
    
    # 是否全字母       
    print('Hello'.isalpha())        # True
    
    # 是否全数字     
    print('Hello123'.isdigit())     # False  
    
    # 是否全小写 
    print('Hello'.islower())        # False
    
    # 是否全大写       
    print('Hello'.isupper())        # False
    

    查找

    # 搜索字符串第一次出现的位置,没有返回-1
    print('Hello'.find('o'))     # 4
    
    # 从指定起始位置开始搜索         
    print('Hello'.find('o',1))   # 4    
    
    # 指定起始及结束位置搜索  
    print('Hello'.find('o',1,3)) # -1  
    
    # 从右边开始查找
    print('Hello'.rfind('o'))    # 4
    
    # 搜索到多少个指定字符串          
    print('Hello'.count('o'))    # 1
    

    替换

    # 替换所有'l'为'm'
    print('Hello'.replace('l', 'm'))    
    # Hemmo 
    
    # 替换指定次数的'l'为'm'
    print('Hello'.replace('l', 'm', 1)) 
    # Hemlo 
    
    # 每个tab替换为4个空格,默认为8个
    print('	Hello'.expandtabs(4))       
    # '    Hello'
    

    分割与连接

    # 使用空格分割字符串,返回列表
    print('H e l l o'.split(' ')) 
    # ['H', 'e', 'l', 'l', 'o']           
    
    # 按行分割符分为一个列表,True表示保留行分割符
    print('Hello\\nWorld'.splitlines(True)) 
    # ['Hello\\n', 'World']
    
    # 把seq序列用''连接    
    print(''.join(['H','e','l','l','o']))  
    # Hello
    

    映射

    # 将abcde映射到ABCDE
    table = str.maketrans('abcde', 'ABCDE')
    'abc'.translate(table)
    # 'ABC'
    

    2.列表

    列表创建

    l = []                      
    print(l)  # []
    
    l = list()                  
    print(l)  # []
    
    l = [1,2,3] + [4,5,6]       
    print(l)  # [1,2,3,4,5,6]
    
    l = ['Hi'] * 3              
    print(l)  # ['Hi','Hi','Hi']
    

    列表切片

    l = [1,2,3,4,5,6]
    
    print(l[0:3])     # [1, 2, 3]
    
    print(l[:3])      # [1, 2, 3]
    
    print(l[-3:-1])   # [4, 5]
    
    print(l[-3:])     # [4, 5, 6]
    
    print(l[0:10:2])  # [1, 3, 5]
    
    print(l[:])       # [1, 2, 3, 4, 5, 6]
    
    print(l[::-1])    # [6, 5, 4, 3, 2, 1]
    

    列表操作

    l = [1,2,3]
    
    l.append(4)     # 末尾追加元素      
    print(l)        # [1, 2, 3, 4]  
    
    l.insert(0, -1) # 将元素插入指定位置
    print(l)        # [-1, 1, 2, 3, 4]
    
    r = l.pop()     # 移除末尾元素并返回
    print(l, r)     # [-1, 1, 2, 3] 4 
    
    r = l.pop(0)    # 移除指定位置元素并返回
    print(l, r)     # [1, 2, 3] -1 
    
    l.remove(1)     # 移除指定元素的第一个匹配项
    print(l)        # [2, 3]  
    
    l.extend([4,5]) # 用新列表扩展原列表
    print(l)        # [2, 3, 4, 5] 
    
    print(l.count(2)) # 1 统计元素出现次数
    print(l.index(2)) # 0 返回第一个匹配项的索引
    
    l.reverse()       # 反向列表中元素
    print(l)          # [5, 4, 3, 2]
    
    l.sort()          # 对列表进行排序
    print(l)          # [2, 3, 4, 5]
    
    t = (1,2,3)       # 将元组转换为列表
    print(list(t))    # [1, 2, 3]
    

    列表表达式

    print([i*i for i in range(10) if i%2])
    # [1, 9, 25, 49, 81]
    
    print([m+n for m in 'AB' for n in 'XY'])
    # ['AX', 'AY', 'BX', 'BY']
    

    3.元组

    # 元组初始化后不能修改
    
    t = ()
    print(t)  # ()
    
    t = (50,)
    print(t)  # (50,)
    
    t = ('A', 'B', 1, 2)
    print(t)  # ('A', 'B', 1, 2)
    
    # 将列表转换为元组
    print(tuple([1,2]))          # (1, 2)
    
    # 传入字典返回key的元组       
    print(tuple({1:'A', 2:'B'})) # (1, 2)
    

    4.集合

    # 1.集合是无序的和无重复元素的
    # 2.集合中不能放入可变对象
    
    s = {'A', 'B'} 
    print(s)       # {'B', 'A'}
    
    s.add('CD')    # 添加整体
    print(s)       # {'B', 'A', 'CD'}
    
    s.update('CD') # 添加每个元素
    print(s)       # {'B', 'C', 'D', 'A', 'CD'}
    
    s.remove('CD') # 移除元素
    print(s)       # {'B', 'C', 'D', 'A'}
    
    s2 = {'A', 'D'}
    print(s & s2)  # 交集 {'D', 'A'}
    print(s | s2)  # 并集 {'B', 'C', 'D', 'A'}
    print(s - s2)  # 差集 {'B', 'C'}
    
    # 集合推导式
    s = {x*x for x in range(5)}
    print(s)       # {0, 1, 4, 9, 16}
    

    5.字典

    d = {1:'A', 2:'B'} # key为不可变对象
    
    # 返回所有键值对
    print(d.items())   # [(1, 'A'), (2, 'B')]
    
    # 返回所有键
    print(d.keys())    # [1, 2]  
    
    # 返回所有值
    print(d.values())  # ['A', 'B']
    
    # 判断键是否存在
    print(1 in d)      # True
    
    # 返回指定键的值,键不存在返回None
    print(d.get(3, None)) # None        
    
    # 返回指定键的值,键不存在添加键并赋值为None
    print(d.setdefault(3, None)) # None 
    print(d)   # {1: 'A', 2: 'B', 3: None}
    
    d.update({3:'C'}) # 添加键值对
    print(d)   # {1: 'A', 2: 'B', 3: 'C'}            
    
    d.pop(3)   # 根据指定的键删除键值对
    print(d)   # {1: 'A', 2: 'B'}
    
    del d[2]   # 删除键是2的键值对
    print(d)   # {1: 'A'}
    
    d.clear()  # 清空字典
    print(d)   # {}
    
    # 字典推导式
    d = {1:'A', 2:'B'}
    d2 = {key: value for key, value in d.items() if key > 1}
    print(d2) # {2: 'B'}
    
    # 快速对换字典的键和值
    d3 = {value: key for key, value in  d.items()} 
    print(d3) # {'A': 1, 'B': 2}
    

    6.枚举

    from enum import Enum, unique
    
    #1 直接使用枚举类
    Week = Enum('Week', ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'))
    print(Week.Mon.name)  # Mon
    print(Week.Mon.value) # 1
    
    for _, week in Week.__members__.items():
        print(week.name, week.value) 
        # Mon 1
        # Tue 2
        # ...
    
    #2 自定义继承枚举类
    @unique  # 保证没有重复值
    class Weekday(Enum):
        Sun = 0 
        Mon = 1
        Tue = 2
        Wed = 3
        Thu = 4
        Fri = 5
        Sat = 6
    
    print(Weekday.Sun.name)   # Sun
    print(Weekday.Sun.value)  # 0
    

    7.队列

    先进先出队列

    # FIFO先进先出队列
    from queue import Queue
    
    # maxsize设置队列中数据上限,小于或等于0则不限制,队列中数据大于这个数则阻塞,直到队列中的数据被取出
    q = Queue(maxsize=0)
    
    # 往队列写入数据
    q.put(0)
    q.put(1)
    q.put(2)
    
    # 输出队列所有数据
    print(q.queue)    # deque([0, 1, 2])
    
    # 取队头数据
    r = q.get()
    print(r, q.queue) # 0 deque([1, 2])
    

    后进先出队列

    # LIFO后进先出队列(栈)
    from queue import LifoQueue
    
    lq = LifoQueue(maxsize=0)
    
    # 往队列写入数据
    lq.put(0)
    lq.put(1)
    lq.put(2)
    
    # 输出队列所有数据
    print(lq.queue)    # [0, 1, 2]
    
    # 取队尾数据
    r = lq.get()
    print(r, lq.queue) # 2 [0, 1]
    

    优先级队列

    # 优先级队列,优先级设置数越小等级越高
    from queue import PriorityQueue
    
    pq = PriorityQueue(maxsize=0)
    
    # 往队列写入数据,设置优先级
    pq.put((2,'a'))
    pq.put((1,'c'))
    pq.put((3,'b'))
    
    # 输出队列全部数据
    print(pq.queue)   
    # [(1, 'c'), (2, 'a'), (3, 'b')]
    
    # 按优先级取队列数据
    r = pq.get()
    print(r, pq.queue) 
    # (1, 'c') [(2, 'a'), (3, 'b')]
    

    双边队列

    # 双边队列
    from queue import deque
    
    dq = deque(['b','c'])
    
    dq.append('d')     # 添加数据到队尾
    dq.appendleft('a') # 添加数据到队左
    
    # 输出队列所有数据
    print(dq)           
    # deque(['a', 'b', 'c', 'd'])
    
    # 移除队尾元素并返回
    print(dq.pop())     # d
    
    # 移除队左元素并返回
    print(dq.popleft()) # a
    

    生产者消费者模型

    from queue import Queue
    import threading
    import time
    
    q = Queue(maxsize=10)
    count = 1
    
    def produce(name):
        global count 
        while count<10:
            q.put('第{}个面包'.format(count))
            print('{}生产了第{}个面包
    '.format(name, count))
            count += 1
            time.sleep(0.3)
    
    def cousume(name):
        global count 
        while count<10:
            print('{}消费掉{}
    '.format(name, q.get()))
            time.sleep(0.3)
            q.task_done()
    
    #开启线程
    p1 = threading.Thread(target=produce,args=('P1',))
    c1 = threading.Thread(target=cousume,args=('C1',))
    c2 = threading.Thread(target=cousume,args=('C2',))
    
    p1.start()
    c1.start()
    c2.start()
    

    8.collections

    双向列表

    # 高效插入和删除的双向列表
    from collections import deque
      
    d = deque(['b', 'c'], maxlen=3) 
    print(d) 
    # deque(['b', 'c'], maxlen=3)
    
    d.appendleft('a')
    print(d) 
    # deque(['a', 'b', 'c'], maxlen=3)
    
    d.append('d')
    print(d) 
    # deque(['b', 'c', 'd'], maxlen=3)
    
    d.extend(['e', 'f'])
    print(d) 
    # deque(['d', 'e', 'f'], maxlen=3)
    
    d.extendleft(['c','b'])
    print(d) 
    # deque(['b', 'c', 'd'], maxlen=3)
    
    d.pop()
    print(d) 
    # deque(['b', 'c'], maxlen=3)
    
    d.popleft()
    print(d) 
    # deque(['c'], maxlen=3)
    

    命名元组

    from collections import namedtuple
    
    Point = namedtuple('Point', ['x', 'y'])
    p = Point(1, 2)
    print(p.x) # 1
    print(p.y) # 2
    
    p1 = p._replace(y=3) # 修改元素
    print(p1)            # Point(x=1, y=3)
    
    d = {'x':4, 'y':5}
    p2 = p._replace(**d) # 修改元素
    print(p2)            # Point(x=4, y=5)
    
    p3 = p._asdict()     # 转换为字典 
    print(p3)            
    # OrderedDict([('x', 1), ('y', 2)])
    

    默认值字典

    from collections import defaultdict
    
    # 键值默认值设为'N/A'
    dd = defaultdict(lambda: 'N/A')  
    print(dd['key']) # N/A
    
    # 键值默认值设为list
    t = ((0, 'A'),(1, 'B'),(1, 'C'),)
    dd = defaultdict(list)
    for num, letter in t:
        dd[num].append(letter)
    print(dd)
    # defaultdict(<class 'list'>, {0: ['A'], 1: ['B', 'C']})
    print(dd[1])
    # ['B', 'C']
    

    顺序字典

    from collections import OrderedDict
    
    # OrderedDict的Key按插入顺序排列
    od = OrderedDict([('c', 3), ('a', 1), ('b', 2)])  
    print(od) 
    # OrderedDict([('c', 3), ('a', 1), ('b', 2)])
    

    计数器

    from collections import Counter
    
    # 统计字符出现的个数
    c = Counter()
    for ch in 'aabc':
        c[ch] = c[ch] + 1
    print(c) 
    # Counter({'a': 2, 'b': 1, 'c': 1})
    
    # 统计序列中的元素
    t = ((0, 'A'),(1, 'B'),(1, 'C'),)
    c = Counter(num for num, letter in t)
    print(c) 
    # Counter({1: 2, 0: 1})
    
    # 统计文件
    with open('test.txt', 'r') as f:
        line_count = Counter(f)
    print(line_count)
    
  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/qxcheng/p/13535662.html
Copyright © 2011-2022 走看看