美文网首页
Python组合数据类型笔记

Python组合数据类型笔记

作者: 枯藤疯鸦 | 来源:发表于2019-11-04 17:05 被阅读0次

    小白笔记
    仅记录常规操作中较为不熟悉的操作类型

    1、list(str)/str.split():列表中的元素为字符类型

    >>> s='1,3,6,9,2,5,1'
    >>> s=list(s)
    >>> s
    
    # ['1',',','3',',','6',',','9',',','2',',','5',',','1']
    
    >>> s='1,2,3,4' 
    >>> s=s.split(',') 
    >>> s 
    
    # ['1','2','3','4']
    

    2、对于数字字符串要转换为列表类型,需要加eval函数,非数字字符串不可用否则会报错

    >>> s='1,3,6,9,2,5,1'
    >>> s=list(eval(s))
    >>> s
    
    # [1, 3, 6, 9, 2, 5, 1]
    
    >>> s='a,b,c'
    >>> c=list(eval(s))
    
    Traceback (most recent call last):
      File "<pyshell#13>", line 1, in <module>
        c=list(eval(s))
      File "<string>", line 1, in <module>
    NameError: name 'a' is not defined
    

    3、对于列表定义,非数字元素需要加引号,否则会报错

    >>> f=[a,b,c]
    
    Traceback (most recent call last):
      File "<pyshell#19>", line 1, in <module>
        f=[a,b,c]
    NameError: name 'a' is not defined
    
    >>> f=[1,2,3]
    >>> f
    
    # [1, 2, 3]
    

    注:列表类型可以使用 "+" 来为列表增加元素,可见如下杨辉三角的生成器实例:

    def triangles():
        L = [1]
        while 1:
            yield L
            L = [0] + L + [0]
            L = [L[i] + L[i + 1] for i in range(len(L) - 1)]
    

    4、关于字典定义,其中非数字元素必须为字符串形式(即:必须有引号),键值都是

    >>> d = {china:beijing,usa:newyork}
    
    Traceback (most recent call last):
      File "<pyshell#6>", line 1, in <module>
        d = {china:beijing,usa:newyork}
    NameError: name 'china' is not defined
    
    >>> d = {'a':2,'b':3}
    >>> d
    
    # {'a': 2, 'b': 3}
    

    5、字典中:k in d 仅用于判断某一键 k 是否在字典 d 中

    6、ls.remove(x) 将列表ls中出现的第一个元素x删除,不会生产新的列表,是对原列表进行修改

    7、d.get(k, <default>) 用来返回字典 d 中的 k 键对应的值,如果不存在 k 键则返回 <default>

    8、d.pop(k, <default>)用来删除字典 d 中 k 键及对应的值,如果不存在 k 键则返回 <default>

    >>> d = {'中国':'北京','美国':'华盛顿','法国':'巴黎'}
    >>> d.get('中国','罗马')
    
    # '北京'
    
    >>> d.get('慕尼黑','罗马')
    
    # '罗马'
    
    >>> d.pop('中国','罗马')
    
    # '北京'
    
    >>> d.pop('慕尼黑','罗马')
    
    # '罗马'
    
    >>> d
    
    # {'美国': '华盛顿', '法国': '巴黎'}
    

    9、列表生成式
    列表生成式就是一个用来生成列表的特定语法形式的表达式,它是一种语法糖。

    语法糖是指计算机语言中,某些特定功能用一种简洁方便的语法实现,以代替常规语法(比如电话中的快速拨号:用“长按1” 来呼叫特定联系人,以替代拨打完整的电话号码)

    基础语法格式

    [exp for iter_var in iterable]
    

    工作过程:

    迭代iterable中的每个元素; # iterable:迭代对象
    每次迭代先把结果赋给iter_var,后通过exp得到一个新值; # exp:表达式
    最后把所有通过exp得到的计算值以一个新列表的形式返回。

    相当于这样的过程:

    L = []
    for iter_var in iterable:
        L.append(exp)
    

    实例:生成一个2n+1的数字列表,n为从3到11的数字

    list1 = [2*n + 1 for n in range(3, 11)]
    

    带过滤功能语法格式

    [exp for iter_var in iterable if_exp]
    

    工作过程:

    迭代iterable中的每个元素,每次迭代都先判断if_exp表达式结果为真,如果为真则进行下一步,如果为假则进行下一次迭代;
    把迭代结果赋值给iter_var,然后通过exp得到一个新的计算值;
    最后把所有通过exp得到的计算值以一个新列表的形式返回。

    相当于这样的过程:

    L = []
    for iter_var in iterable:
        if_exp:
            L.append(exp)
    

    实例:过滤出一个指定的数字列表中值大于20的元素

    L = [3, 7, 11, 14,19, 33, 26, 57, 99]
    list2 = [x for x in L if x > 20]
    

    循环嵌套语法格式

    [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
    

    工作过程:

    每迭代iterable_A中的一个元素,就把ierable_B中的所有元素都迭代一遍。

    相当于这样的过程:

    L = []
    for iter_var_A in iterable_A:
        for iter_var_B in iterable_B:
            L.append(exp)
    

    实例:计算两个集合的全排列,并将结果作为保存至一个新的列表中

    L1 = ['香蕉', '苹果', '橙子']
    L2 = ['可乐', '牛奶']
    list3 = [(x, y) for x in L1 for y in L2]
    

    10、生成器
    按照某种算法不断生成新的数据,直到满足某一个指定的条件结束
    构造生成器的两种方式:

    • 使用类似列表生成式的方式生成
    (2*n + 1 for n in range(3, 11))   # 把列表生成式中的 [] 改为 () 即可
    
    • 使用包含yield的函数来生成
      实例:
    def my_range(start, end):
        for n in range(start, end):
            yield 2*n + 1  # 生成器函数,在执行时遇到yield的时候,函数返回(中断),只有下次调用时才会继续执行后续语句(从上次中断的位置继续)
            print('测试执行过程')
    
    g1 = my_range(3, 6)
    

    利用next() 函数来遍历生成器(可以用for循环遍历)
    第一次遍历

    print(next(g1))
    

    结果是:

    7
    

    第二次遍历

    print(next(g1))
    

    结果是:

    测试执行过程
    9
    

    需要说明的是:如果生成器函数有返回值,要获取该返回值的话,只能通过在一个while循环中不断的next(),最后通过捕获StopIteration异常

    参考链接:
    https://www.cnblogs.com/yyds/p/6281453.html
    https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128

    相关文章

      网友评论

          本文标题:Python组合数据类型笔记

          本文链接:https://www.haomeiwen.com/subject/zqmdbctx.html