• python学习笔记四一列表元组字典等


    •python中的内置类型◾str
    ◾list
    ◾tuple
    ◾set
    ◾dict
    •list 列表
    •一组由有序数据组成的序列◾数据有先后数据
    ◾数据可以不是一类数据

    •list 的创建◾直接创建,用中括号创建,内容使用因为逗号 , 隔开
    ◾使用list创建
    ◾列表包含单个字符串的时候是一个特例

    #直接赋值创建列表
    l1 = [1,2,3,4,5]
    #list内的数据可以不是一个类型
    l2 = [1,2,3,"gepengcheng","杨雨"]
    print (l1)
    print (l2)
    

    [1, 2, 3, 4, 5]
    [1, 2, 3, ‘gepengcheng’, ‘杨雨’]

    #创建列表的第二种方式
    l3 = list ()
    print (l3)
    #现实创建l3是什么类型函数
    print (type (l3))
    

    []
    <class ‘list’>

    内置函数
    •help ;帮助函数
    •type : 现实变量的类型
    •id :现实变量id
    •print : 打印

    # list 创建的特例
    s = "gepengcheng"
    #想创建一个只含s只包含一个字符串的列表
    l1 = list(s)
    print (type (l1))
    print (l1)
    

    <class ‘list’>
    [‘g’, ‘e’, ‘p’, ‘e’, ‘n’, ‘g’, ‘c’, ‘h’, ‘e’, ‘n’, ‘g’]

    列表的常见操作
    •访问◾使用下标操作,也叫索引
    ◾列表的元素索引从0开始

    •切片操作◾对列表进行任意一段的截取需要注意取值范围,左包括右不包括
    ◾截取之后创建一个新得列表

    l1 = [12,13,11,22,345,33]
    #使用下标访问
    print(l1[0])
    print (l1[3])
    #IndexError访问超标
    print (l1[15])
    

    12
    22


    IndexError Traceback (most recent call last)
    in
    4 print (l1[3])
    5 #IndexError访问超标
    ----> 6 print (l1[15])

    IndexError: list index out of range

    #切片操作需要注意取值范围,元素索引从0开始左包括右不包括
    l1 = [100,200,300,400,500,600,700,800,900]
    print (l1[3:6])
    #切片操作下标可以为空
    print (l1[:6])
    print (l1[3:])
    print (l1[:])
    
    
    print("__________________________________")#分隔符
    #下面结果说明切片后生成一个全新的列表
    #通过内置函数id可以判断出切片是否生成了一个全新的列表
    #id 的作用是用来判断两个变量是否是一个变量
    l2 = l1[0:10]
    print (id(l1))
    print (id(l2))
    

    [400, 500, 600]
    [100, 200, 300, 400, 500, 600]
    [400, 500, 600, 700, 800, 900]
    [100, 200, 300, 400, 500, 600, 700, 800, 900]


    2546774356808
    2546755019528

    #切片可以控制增长的幅度,默认增长幅度为1
    l1 = [100,200,300,400,500,600,700,800,900,1000]
    print (l1[::1])#等于print (l1[:])
    print (l1[::2])
    
    print("__________________________________")#分隔符
    
    #下标可以超出范围,超出后不在考虑多余的下标内容
    print (l1[:100])
    print (l1[100:])
    

    [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
    [100, 300, 500, 700, 900]


    [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
    []

    #下标从左往右数从0开始如 0,1,2,3,....
    #下标从右往左数从-1开始如 -1,-2,-3,-4....
    l1 = [100,200,300,400,500,600,700,800,900,1000]
    #下面例子为空,因为默认是从左向右移动
    print (l1[-2:-5])
    #如果我想从右往左开始 打印900,800,700则:
    print (l1[-2:-5:-1])
    
    #如果我想从右往左开始 打印700,800,900则;
    print (l1[-4:-1:1])
    

    []
    [900, 800, 700]
    [700, 800, 900]

    tuple (元组)
    •可以理解成一个不允许更改的列表

    tuple (元组)
    •可以理解成一个不允许更改的列表

    #tuple 创建
    # 1,直接用小括号创建
    a = ()
    print (type(a))
    #用小括号创建一个元素的tuple的时候
    b = (100)
    print (type(b))
    c = (100,)
    print (type(c))
    d = (1,2,3,4)
    print (d)
    print (type(d))
    
    print ("___________________________________________")#分隔符
    # 2,直接用逗号
    a1 = 100,
    print (type(a1))
    b1 = (1,2,3,4)
    print (type(b1))
    
    print ("___________________________________________")#分隔符
    a2 = tuple ()
    print (a2)
    b1 = [1,2,3,"gepengcheng"]#要求tuple参数必须可迭代
    c1 = tuple (b1)
    print (c1)
    
    

    <class ‘tuple’>
    <class ‘int’>
    <class ‘tuple’>
    (1, 2, 3, 4)
    <class ‘tuple’>


    <class ‘tuple’>
    <class ‘tuple’>


    ()
    (1, 2, 3, ‘gepengcheng’)

    tuple 其余特征和list基本一致
    •有序
    •可以访问不可以更改
    •元素可以是任意类型

    # tuple索引操作
    a3 = ["i","love","una"]
    print (a3)
    b3 = tuple (a3)
    print (b3[2])
    

    [‘i’, ‘love’, ‘una’]
    una

    # tuple 分片操作
    print (b3[:])
    print (b3[:2])
    print (b3[-1::-1])
    

    (‘i’, ‘love’, ‘una’)
    (‘i’, ‘love’)
    (‘una’, ‘love’, ‘i’)

    # 元组的相加
    ta = 100,200,300
    tb = ("i","love","una")
    tc = ta + tb
    print (tc)
    

    (100, 200, 300, ‘i’, ‘love’, ‘una’)

    #tuple 乘法
    aa = a3 * 2
    print (aa)
    

    [‘i’, ‘love’, ‘una’, ‘i’, ‘love’, ‘una’]

    # tuple 成员检测
    print (a3)
    if "una" in a3:
        print ("检测到una")
    if "yangyu" not in a3:
        print ("未检测到yangyu")
    if "una" not in a3:
        print ("未检测到una")
    

    [‘i’, ‘love’, ‘una’]
    检测到una
    未检测到yangyu

    # 元组遍历(把一段字符拆开)
    love = ["i","love","una"]
    for i in love:
        print (i)
    

    i
    love
    una

    # 元组嵌套
    a4 = ((100,200,300),("i","love","una"),(520,13,14))
    #双层循环
    for A in a4:
        print (A)
        for B in A:
            print (B)
    

    (100, 200, 300)
    100
    200
    300
    (‘i’, ‘love’, ‘una’)
    i
    love
    una
    (520, 13, 14)
    520
    13
    14

    #使用单层循环
    b4 = ((100,200,300),("i","love","una"),(520,13,14))
    for i,l,u in b4:
        print (i,l,u)
        
    print ("____________________________________")#分隔符
    # 上面访问中有一个规定,既i,l,u要跟元组个数进行对应
    for i,l,u,y in b4:
        print (i,l,u,y)
    

    100 200 300
    i love una
    520 13 14



    ValueError Traceback (most recent call last)
    in
    6 print ("____________________________________")#分隔符
    7 # 上面访问中有一个规定,既i,l,u要跟元组个数进行对应
    ----> 8 for i,l,u,y in b4:
    9 print (i,l,u,y)
    10

    ValueError: not enough values to unpack (expected 4, got 3)

    #常用元组函数
    # len : 长度
    c4 = ((100,200,300),("i","love","una"),(520,13,14))
    print(len(c4))
    
    print ("____________________________________")#分隔符
    
    # max/min : 最大值/最小值
    d4 = (12,342,31312,212)
    print (max(d4))
    print (min(d4))
    
    print ("____________________________________")#分隔符
    
    # count : 对某一元素进行计数
    f4 = (1,2,3,4,5,1,1,1,1,1)
    print (f4.count(1))
    
    print ("____________________________________")#分隔符
    
    # index : 某一元素所在位置
    e4 = (1,2,3,4,5,1,1,1,1,1)
    print(e4.index(5))
    

    3


    31312
    12


    6


    4

    # tuple的特殊用法
    a = 520
    b = "yang yu"
    print (a,b)
    
    print ("____________________________________")#分隔符
    
    #要求对a,b值进行互换
    a,b = b,a
    print (a,b)
    

    520 yang yu


    yang yu 520

    集合
    •跟数学中集合得概念一致
    •内容无序+内容不重复

    # 集合的定义
    # 1,通过set关键字
    aa = set ()
    print (aa)
    

    set()

    #集合定义最多只能定义1个参数
    bb = set (1,2,3,4,5,6)
    print (bb)
    

    TypeError Traceback (most recent call last)
    in
    1 #集合定义最多只能定义1个参数
    ----> 2 bb = set (1)
    3 print (bb)

    TypeError: ‘int’ object is not iterable

    b = [1,2,3,4,5,6,7]
    bbb = set (b)
    print (bbb)
    

    {1, 2, 3, 4, 5, 6, 7}

    # 2 ,使用大括号定义
    sc = {1,2,3,4,5,6,7,8,11,22,33}
    print (sc)
    

    {1, 2, 3, 4, 5, 6, 7, 8, 33, 11, 22}

    # in 操作
    if 2 in sc:
        print ("2在sc里面")
    if 9 in sc:
        print ("9在sc里面")
    print ("____________________________________")#分隔符
    #集合里面的顺序是无序的
    for i in sc:
        print (i)
    

    2在sc里面


    1
    2
    3
    4
    5
    6
    7
    8
    33
    11
    22

    # 集合的另一种遍历
    sb = {(1,2,3),(4,5,6),("i","love","una")}
    for a,b,c in sb:
        print (a,b,c)
    

    i love una
    4 5 6
    1 2 3

    # 集合的生成式
    sa = {1,2,3,4,5,6,7,8,9}
    # 利用sa 生成一个sb
    sb = {a for a in sa}
    print (sb)
    print ("____________________________________")#分隔符
    sc = {a for a in sa if a %2 == 0}
    print (sc)
    print ("____________________________________")#分隔符
    sd = {a for a in sa if a %2 == 1}
    print (sd)
    
    print ("____________________________________")#分隔符
    
    #双重for循环
    #把 sa 中的每一个元素的平方生成一个新的集合
    # 1,用1个for
    sb = {i ** 2 for i in sa}
    print (sb)
    print ("____________________________________")#分隔符
    # 2,用2个for循环
    se = {m*n for m in sa for n in sa}
    print (se)
    

    {1, 2, 3, 4, 5, 6, 7, 8, 9}


    {8, 2, 4, 6}


    {1, 3, 5, 7, 9}


    {64, 1, 4, 36, 9, 16, 49, 81, 25}


    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40, 42, 45, 48, 49, 54, 56, 63, 64, 72, 81}

    # 集合的内置函数
    # len: 长度
    print (len (se))
    # max/min : 最大值/最小值
    #add : 向集合中添加元素
    
    sa = {1,2,3,4,5,6,5,4,3,2,1}
    print (sa)
    # 向sa中添加数字7 结果打印出来None
    print (sa.add(7))
    #添加了值并不会在add添加选项中打印出来 如下列
    print (sa)
    print (sa.add(8))
    print (sa)
    

    36
    {1, 2, 3, 4, 5, 6}
    None
    {1, 2, 3, 4, 5, 6, 7}
    None
    {1, 2, 3, 4, 5, 6, 7, 8}

    # clear : 清空
    #删除操作
    # remove 与 discard的区别
    
    
    #remove案例
    sa1 = {1,2,3,4,5,6,7,8,9}
    print (sa1)
    sa1.remove(5)
    print (sa1)
    print ("____________________________________")#分隔符
    #如果remove删除的值并不在集合中就会报错
    sa1.remove(5)
    print (sa1)
    
    

    {1, 2, 3, 4, 5, 6, 7, 8, 9}
    {1, 2, 3, 4, 6, 7, 8, 9}



    KeyError Traceback (most recent call last)
    in
    8 print ("____________________________________")#分隔符
    9 #如果remove删除的值并不在集合中就会报错
    —> 10 sa1.remove(5)
    11 print (sa1)

    KeyError: 5

    # discard案例
    sa1 = {1,2,3,4,5,6,7,8,9}
    print (sa1)
    sa1.discard(5)
    print (sa1)
    print ("____________________________________")#分隔符
    #如果discard删除的值就不会报错
    sa1.discard(5)
    print (sa1)
    

    {1, 2, 3, 4, 5, 6, 7, 8, 9}
    {1, 2, 3, 4, 6, 7, 8, 9}


    {1, 2, 3, 4, 6, 7, 8, 9}

    # pop删除集合的一个内容
    #删除的内容是随机的
    sa1 = {1,2,3,4,5,6,7,8,9}
    print (sa1)
    sa1.pop()
    print (sa1)
    sa1.pop()
    print (sa1)
    

    {1, 2, 3, 4, 5, 6, 7, 8, 9}
    {2, 3, 4, 5, 6, 7, 8, 9}
    {3, 4, 5, 6, 7, 8, 9}

    # 集合的数学操作
    # intersection : 交集
    sa = {1,2,3,4,5,6}
    sb = {4,5,6,7,8,9,}
    #sa 和 sb 的交集
    print(sa.intersection(sb))
    # difference : 差集
    print (sa.difference (sb))
    #差集的另外一表示
    print (sa - sb)
    
    # union : 并集
    print (sa.union(sb))
    #并集 不能使用+表示
    print (sa + sb)
    

    {4, 5, 6}
    {1, 2, 3}
    {1, 2, 3}
    {1, 2, 3, 4, 5, 6, 7, 8, 9}


    TypeError Traceback (most recent call last)
    in
    13 print (sa.union(sb))
    14 #并集 不能使用+表示
    —> 15 print (sa + sb)

    TypeError: unsupported operand type(s) for +: ‘set’ and ‘set’

    frozenset 冰冻集合¶
    •不允许修改的集合

    # 案例
    print(sa)
    sb = frozenset (sa)
    print (sb)
    

    {1, 2, 3, 4, 5, 6}
    frozenset({1, 2, 3, 4, 5, 6})

    递归函数¶
    •递归 : 函数间接或者直接调用自己
    •递归分两个过程◾往下调用,分解过程
    ◾往上回溯,综合过程

    •递归需要注意◾一定要有结束条件

    •是以资源换取编写速度的算法比较吃硬件

    def a (n):
        print ("i love una ")
        
    def b (n):
        a(100)
        print ("una love gpc")
    b(100)
    

    i love una
    una love gpc

    # func_a表示己算阶乘
    #利用数学公式
    def fun_a(n):
        print (n)
        #递归一定要有结束条件
        if n == 1:
            return 1
        return n * fun_a(n-1)
    rst = fun_a(5)
    print ("f(5) =  ",rst)
    

    5
    4
    3
    2
    1
    f(5) = 120

    递归必须有结束,负责会死掉报错¶
    •def fun_a(n):
    •print (n)
    •return n * fun_a(n-1)
    •rst = fun_a(5)
    •print ("f(5) = ",rst)
    在这里插入图片描述

    # 斐波那契额数列
    #1,1,2,3,5,8,13,21  前两个数列相加
    def fib (n):
        if n ==1 or n ==2:
            return 1
        return fib(n-1) + fib(n-2)
    
    jieguo = fib (10)
    print ("jieguo=",jieguo)
    
    

    jieguo= 55

    # 汉诺塔
    a = "A"
    b = "B"
    c = "C"
    def hannuo(a,b,c,n):
        if n == 1:
            print ("{}-->{}".format(a,c))
            return None
        if n == 2:
            print ("{}-->{}".format(a,c))
            print ("{}-->{}".format(a,b))
            print ("{}-->{}".format(b,c))
            return None
        hannuo(a,c,b,n-1)
        print ("{}-->{}".format(a,c))
        hannuo(b,a,c,n-1)
    
    # 只有一个盘子
    hannuo(a,b,c,1)
    

    A–>C

    hannuo (a,b,c,5)
    

    A–>B
    A–>C
    C–>B
    A–>C
    B–>C
    B–>A
    A–>C
    A–>B
    C–>A
    C–>B
    B–>A
    C–>B
    A–>B
    A–>C
    C–>B
    A–>C
    B–>C
    B–>A
    A–>C
    B–>A
    C–>A
    C–>B
    B–>A
    B–>C
    A–>B
    A–>C
    C–>B
    A–>C
    B–>C
    B–>A
    A–>C

  • 相关阅读:
    浅谈工业无线技术之天线
    防护等级
    PROFINET如何实现实时性
    2020,我又回来了
    关于ReentrantLock和Condition的用法
    当你在试衣间试衣服,请你务必想起wait()与notify()
    用生活例子来解释Java synchronized块
    关于textview显示特殊符号居中的问题
    扯一扯我的2016
    国庆的这6天
  • 原文地址:https://www.cnblogs.com/gemoumou/p/14186301.html
Copyright © 2020-2023  润新知