Python_流程控制及数据结结构

Posted summer-dhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_流程控制及数据结结构相关的知识,希望对你有一定的参考价值。

----------------- 流程控制 --------------------

条件判断

  • 语法:

    # 单分支
    if <condition>:
        <执行代码块>
    
    # 多分支
    if <condition1>:
        <执行代码块1>
    elif <condition2>:
        <执行代码块2>
    elif <condition3>:
        <执行代码块3>
    else:
        <执行代码块>
    
    
    # 注:
        # condition必须为一个bool类型
        # if elif else语句后面有一个冒号,冒号之后的执行代码块需要另起一行并进行缩进 
  • 示例:

    # 单分支示例
    age = 18
    if age < 20:
        print("tool small")
    
    # 多分支示例(成绩评级)
    result = int(input('Please input your result: '))
    if result >= 90:
        print("Your result is A")
    elif 80 <= result < 90:
        print("Your result is B")
    elif 70 <= result < 80:
        print("Your result is C")
    elif 60 <= result < 70:
        print("Your result is D")
    else:
         print("Your result is E")
    
    #注:
        # input()为内建函数,在控制台与用户进行交互,获取用户输入,返回字符串
        # int(value) 将给定的值value转换成整数

循环

  • while 循环

    # 语法
    while cond:
        block
    
    while True:   # 死循环
        pass
    
    # 示例
    a = 10
    while a : # 条件满足则进入循环,当a = 0时,0为等价False,则不进入循环
        print(a)
        a -=
  • for 循环

    # 语法
    for element in interatable:   # 可迭代对象有可迭代元素,进入循环
        block
    
    # 示例:循环输出10以内的数字
    for i in range(0, 10):
        print(i)
    
    # 注:
          # range(stop) 计数器
        # range(start, stop, step)生成一个序列,遍历start和stop之间的值,前包后不包;step表示步长,默认为1;
  • continue 跳过当前当次循环,继续下一次循环
  • break 结束当前循环
  • else子句:如果循环正常结束,else子句会被执行

----------------- 数据结构 ---------------------

概念

  • 数据结构就是通过某种方式组织在一起的数据元素的集合,这些元素可以是数字或字符;在Python中。最基本的数据结构是序列。序列中的每个元素被分配一个序号(即元素的位置,称为索引,索引从0开始,即:第一个索引是0,第二个是1,以此类推)

列表

  • 列表(List):有序的集合,可修改,使用[]表示

  • 定义列表

    • 格式:list_name = [1, 2, 3, 4, 5]

    • 空列表:list_name = []

    • 列表操作

      >>> lst = [1, 2, 3]
      
      # append(obj),末尾追加元素,就地修改且返回None,时间复杂度O(1)
      >>> lst.append(5)       
      >>> lst
      [1, 2, 3, 5]
      
      # list_name[index] = value 索引访问修改,需注意索引不可越界
      >>> lst[3] = 4      
      >>> lst
      [1, 2, 3, 4]
      
      # insert(index, obj) 在指定索引位置插入元素obj,就地修改且返回None,时间复杂度O(n),可越界:越上界,尾部追加;越下界,头部追加
      >>> lst.insert(1,6)     
      >>> lst
      [1, 6, 2, 3, 4]
      
      # extend(interatable),将可迭代元素追加至列表中,就地修改且返回None
      >>> lst.extend(range(7,10))
      >>> lst
      [1, 6, 2, 3, 4, 7, 8, 9]
      >>> lst.extend([11, 12])
      >>> lst
      [1, 6, 2, 3, 4, 7, 8, 9, 11, 12]
      
      # + 将两个列表连接起来,产生新的列表,原列表不变
      >>> lst + [100, 200, 300]
      [1, 6, 2, 3, 4, 7, 8, 9, 11, 12, 100, 200, 300]
      >>> lst     # 原列表不变
      [1, 6, 2, 3, 4, 7, 8, 9, 11, 12]
      
      # * 将本列表元素重复n次,返回新列表;注意分辨以下示例区别
      >>> lst * 3
      [1, 6, 2, 3, 4, 7, 8, 9, 11, 12, 1, 6, 2, 3, 4, 7, 8, 9, 11, 12, 1, 6, 2, 3, 4, 7, 8, 9, 11, 12]
      >>> lst     # 原列表不变
      [1, 6, 2, 3, 4, 7, 8, 9, 11, 12]
      >>> [1, 2, 3] * 3
      [1, 2, 3, 1, 2, 3, 1, 2, 3]
      >>> [[1, 2, 3] * 3]
      [[1, 2, 3, 1, 2, 3, 1, 2, 3]]
      >>> [[1, 2, 3] ] * 3
      [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
      
      # remove(value),从左至右匹配第一个value的值,找到则删除,就地修改且并返回None
      >>> lst = [1, 2, 3, 1, 2, 5, 6]
      >>> lst.remove(1)
      >>> lst
      [2, 3, 1, 2, 5, 6]
      
      # pop(index),不指定index,从列表尾部删除一个元素,指定index则从索引出删除一个元素,返回所删除元素,越界抛出:IndexError错误
      >>> lst.pop()
      6
      >>> lst
      [2, 3, 1, 2, 5]
      >>> lst.pop(3)
      2
      >>> lst
      [2, 3, 1, 5]
      
      # clear(),清除列表所有元素,剩下一个空列表
      >>> lst.clear()
      >>> lst
      []
      
      # reverse(),对列表内元素降序排序,就地修改且返回None
      >>> lst = [1, 2, 3, 1, 2, 5, 6]
      >>> lst.reverse()
      >>> lst
      [6, 5, 2, 1, 3, 2, 1]
      
      # sort(key=None, reverse=False),对列表内元素进行排序,就地修改且返回None;默认为升序,若reverse=True,则为降序;key一个函数,指定如果排序
      >>> lst.sort()
      >>> lst
      [1, 1, 2, 2, 3, 5, 6]
      >>> lst.sort(reverse=True)
      >>> lst
      [6, 5, 3, 2, 2, 1, 1]
      
      # in 包含关系判断,即:in左侧元素是否包含在右侧列表内;返回布尔值
      >>> [1, 2] in [1, 2, [3, 4]]
      False
      >>> [3, 4] in [1, 2, [3, 4]]
      True
      
      # 列表复制:lst1 = lst2
      >>> a = list(range(4))  # 产生一个新列表a
      >>> b = list(range(4))  # 产生一个新列表b
      >>> a == b  # 判断a列表和b列表内元素是否相同
      True
      >>> c = a       # 将列表c指向列表a的列表内存地址,所以当修改列表c或者列表a时,修改的都是a和c所指向的同一个内存地址的列表元素
      >>> c[2] = 10
      >>> c
      [0, 1, 10, 3]
      >>> a
      [0, 1, 10, 3]
      >>> b       # 虽然a和b列表内容相同,但是b和a指向的是不同的内存地址,所以当a列表修改时,b列表不变
      [0, 1, 2, 3]
      >>> id(a), id(c), id(b)     # 通过id(),查看内存地址,由次可见,a和c内存地址相同
      (4509036368, 4509036368, 4509036288)
      
      # copy(),影子拷贝(浅拷贝),遇到引用类型,只复制引用
      >>> a = [1, [2, 3], 4]  
      >>> b = a.copy()    # 列表内元素复制,列表内引用的列表,只复制引用地址,即列a和b列表内引用的列表为同一内存地址的列表
      >>> b
      [1, [2, 3], 4]
      >>> b[1][1] = 11    # 当b修改列表内引用的列表内元素时,由于a和b列表内引用的列表指向同一内存地址,所以a也会随之修改
      >>> b
      [1, [2, 11], 4]
      >>> a       
      [1, [2, 11], 4]
      >>> b[0] = 99       # 由于列表内元素直接复制,所以当b修改元素时,a不会发生修改
      >>> b
      [99, [2, 11], 4]
      >>> a       
      [1, [2, 11], 4]
      
      # 深拷贝deepcopy(需调用copy模块;import copy),直接复制所有元素,列表内的引用类型亦直接拷贝引用元素
      >>> import copy
      >>> a = [1, [2, 3, 4], 5]
      >>> b = copy.deepcopy(a)
      >>> b
      [1, [2, 3, 4], 5]
      >>> b[1][1] = 88    # 列表内引用的列表直接拷贝其列表内容,所以当b列表发生改变时,a列表不变
      >>> b
      [1, [2, 88, 4], 5]
      >>> a
      [1, [2, 3, 4], 5]
      
      # random()随机数
      >>> import random
      >>> random.random()
      0.8953651046887807
      >>> random.random()
      0.02852709684663768
      
      >>> random.randint(5, 20)       # 返回5-20之间的整数
      6
      >>> random.randint(5, 20)
      15
      
      >>> random.randrange(11, 100, 2)    # 返回11-100之间以2递增的整数的随机值,默认步长为1
      57
      >>> random.randrange(11, 100, 2)
      41
      
      >>> random.choice(['剪刀', '石头', '布'])    # 从非空序列随机挑选一个元素
      '剪刀'
      >>> random.choice(['剪刀', '石头', '布'])
      '石头'
      
      >>> random.sample('abcdefghijklmnopqrstuvwxyz!@#$%^&*()', 8)    # 从非空序列取出n个不同的元素并生成一个新列表
      ['!', 'n', '&', 'd', 'q', 'l', 's', 't']
      >>> random.sample('abcdefghijklmnopqrstuvwxyz!@#$%^&*()', 8)
      ['x', '@', 'c', 'p', 'a', 'u', 'h', 'g']
      
      >>> lst = [1, 2, 3, 4, 5]
      >>> random.shuffle(lst)     # 就地打乱列表排序
      >>> lst
      [2, 5, 3, 1, 4]
  • 索引:序列里的元素都是有序号的,从0开始递增,索引0指向第一个元素,最后一个元素可以用-1表示

元组

  • 元组(tuple):不可修改,使用()表示
  • 定义元组:
    • tuple_name = (1, 2, 3, 4)
    • 一个元素元组定义:(1,) 注意有个逗号
    • 空元组:tuple_name = (),tuple_name = tuple()工厂方法
  • 同列表一样,可以通过索引index访问

  • 元组操作:元组是只读的,所以增删改查操作都没有

    >>> tup = tuple(range(1, 10, 2))  # interable
    >>> tup
    (1, 3, 5, 7, 9)
    
    >>> t = (1,)  # 注意一个元素需要加逗号
    >>> t * 5     # 产生新元组,原元组不变
    (1, 1, 1, 1, 1)
    >>> t
    (1,)
    
    >>> tup[2]    # 通过index查看tuple特定索引位置的值
    5
    
    # count(value),返回元组中value的次数
    >>> tup = (1, 2, 3, 2, 3, 2)
    >>> tup.count(2)  
    3
    
    # len(tuple)返回元组中元素的个数
    >>> len(tup)
    6

字典

以上是关于Python_流程控制及数据结结构的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript流程控制

JavaScript流程控制

python基本数据类型及流程控制应用

小白学 Python(13):基础数据结构(字典)(下)

python流程控制语法

< Python全景系列-3 ; Python控制流程盘点及高级用法神秘技巧大揭秘!