字典、集合、控制语句

字典
  • 字典是一个包含键值对的无序可变序列,字典中每个元素都是包含一个键对象和一个值对象。可以通过键对象实现快速获取、删除、更新值对象。注意键对象是任意任意不可变的数据,比如:整数、浮点数、字符串、元组等。但是:列表、字典、集合这些可以改变的对象不能作为键对象,并且键不可重复。

  • 字典的创建:

    • {}直接可以创建空的字典对象

      • >>> a = {}
        >>> type(a)
        <class 'dict'>
        
    • dict()内置函数

      • >>> b = dict(name='gaoqi',age=18,job='programmer')
        >>> a = dict([("name","gaoqi"),("age",18)])
        >>> type(a)
        <class 'dict'>
        >>> type(b)
        <class 'dict'>
        
    • zip()创建字典对象

      • >>> k = ['name','age','job']
        >>> v = ['gaoqi',18,'techer']
        >>> d = dict(zip(k,v))
        >>> d
        {'name': 'gaoqi', 'age': 18, 'job': 'techer'}
        
    • fromkeys方法创建值为空的字典对象

      • >>> a = dict.fromkeys(['name','age','job'])
        >>> a
        {'name': None, 'age': None, 'job': None}
        
    • 字典元素的访问

      • 以键访值,若值不存在则抛出错误

        • >>> a = {'name':'gaoqi','age':18,'job':'programmer'}
          >>> a['name']
          'gaoqi' 
          >>> a['age']
          18
          >>> a['sex']
          Traceback (most recent call last):
          File "<pyshell#374>", line 1, in <module>
          a['sex']
          KeyError: 'sex' 
          
      • 以get方法获得值,优点是若键值不存在可以返回None或者设定指定键不存在时默认返回的对象。

        • >>> a = {'name':'gaoqi','age':18,'job':'programmer'}
          >>> a['name']
          'gaoqi'
          >>> print(a.get('sex'))
          None
          >>> a.get('sex','该值不存在')
          '该值不存在'
          
      • items()方法可以列出所有的键值对

        • >>> a = {'name':'gaoqi','age':18,'job':'programmer'}
          >>> a.items()
          dict_items([('name', 'gaoqi'), ('age', 18), ('job', 'programmer')])
          
      • keys()方法可以列出所有的键,values()可以列出所有的值

        • >>> a = {'name':'gaoqi','age':18,'job':'programmer'}
          >>> a.keys()
          dict_keys(['name', 'age', 'job'])
          >>> a.values()
          dict_values(['gaoqi', 18, 'programmer'])
          
      • 成员操作符,检测键是否在字典中

        • >>> a = {"name":"gaoqi","age":18}
          >>> "name" in a
          True
          
  • 字典元素添加、修改、删除

    1. 给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在,则新增“键值对”

      • >>>a = {'name':'gaoqi','age':18,'job':'programmer'}
        >>> a['address']='西三旗 1 号院' 
        >>> a['age']=16
        >>> a
        {'name': 'gaoqi', 'age': 16, 'job': 'programmer', 'address': '西三旗 1 号院'}
        
    2. 使用 update()将新字典中所有键值对全部添加到旧字典对象上。如果 key 有重复,则直 接覆盖。

      • >>> a = {'name':'gaoqi','age':18,'job':'programmer'}
        >>> b = {'name':'gaoxixi','money':1000,'sex':'男的'}
        >>> a.update(b)
        >>> a
        {'name': 'gaoxixi', 'age': 18, 'job': 'programmer', 'money': 1000, 'sex': '男的'}
        
    3. 字典中指定元素的删除,使用del()方法;或者clear()删除所有键值对;pop()删除指定键值对,并返回对应的“值对象”

      • >>> a = {'name':'gaoqi','age':18,'job':'programmer'}
        >>> del(a['name'])
        >>> a
        {'age': 18, 'job': 'programmer'}
        >>> b = a.pop('age')
        >>> b
        18
        >>> a.clear()
        >>> a
        {}
        
    4. popitem() :随机删除和返回该键值对。

      • >>> a = {'name':'gaoqi','age':18,'job':'programmer'}
        >>> a.popitem()
        ('job', 'programmer')
        >>> a.popitem()
        ('age', 18)
        >>> a.popitem()
        ('name', 'gaoqi')
        >>> a.popitem()
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        KeyError: 'popitem(): dictionary is empty'
        
  • 序列解包:可以使用与元组、列表、字典

    • >>> x,y,z=(20,30,10)
      >>> x
      20
      >>> y
      30
      >>> z
      10
      >>> (a,b,c)=(9,8,10)
      >>> a
      9
      >>> [a,b,c]=[10,20,30]
      >>> a
      10
      >>> b
      20
      
    • 当序列解包用于字典是,默认只对键进行操作;如果要对键值操作,则需要使用items();如果需要对“值”进行操作,则需要使用values();

      • >>> s = {'name':'gaoqi','age':18,'job':'teacher'}
        >>> name,age,job=s #默认对键进行操作
        >>> name
        'name' 
        >>> name,age,job=s.items() #对键值对进行操作
        >>> name
        ('name', 'gaoqi')
        >>> name,age,job=s.values() #对值进行操作
        >>> name
        'gaoqi' 
        
5. 集合
  • 集合是元素无序、可变且不能重复的序列,集合的底层是字典实现的,集合的所有元素都是字典中的“键对象”,因此是不能重复且唯一的

  • 集合的创建:

    • 使用{}创建集合对象,并且使用add()方法添加元素

    • >>> a = {3,5,7}
      >>> a
      {3, 5, 7}
      >>> a.add(9)
      >>> a
      {9, 3, 5, 7}
      
    • 使用set(),将列表、元组等可迭代的对象转化为集合。如果原来数据存在重复,则只保留一个。

      • >>> a = ['a','b','c','b']
        >>> b = set(a)
        >>> b
        {'b', 'a', 'c'}
        
    • remove()方法删除元素;clear()方法清空整个集合

      • >>> a = {10,20,30,40,50}
        >>> a.remove(20)
        >>> a
        {10, 50, 30}
        
  • 集合的交集、并集、差集

    • >>> a = {1,3,'sxt'}
      >>> b = {'he','it','sxt'}
      >>> a|b #并集
      {1, 3, 'sxt', 'he', 'it'}
      >>> a&b #交集
      {'sxt'}
      >>> a-b #差集
      {1, 3}
      >>> a.union(b) #并集
      {1, 3, 'sxt', 'he', 'it'}
      >>> a.intersection(b) #交集
      {'sxt'}
      >>> a.difference(b) #差集
      {1, 3}
      

五、控制语句

1. 条件控制语句
  • 单分支选择结构:

    ​ if 条件表达式:

    ​ 语句/语句块

    其中:

    1. ​ 条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等
    2. ​ 语句/语句块:可以是一条语句也可以是多条语句。多条语句缩进必须对齐一致
  • 条件表达式详解:

    • 在选择和循环结构中,条件表达式的值为False的情况如下,除了下述几种情况外条件表达式均为True。
      • False、0、0.0、空值None、空序列对象、空range对象、空迭代对象
    • 条件表达式中不能存在赋值操作,出现了则抛出异常
  • 双分支结构:

    ​ if 条件表达式 :

    ​ 语句 1/语句块 1

    ​ else:

    ​ 语句 2/语句块 2

  • 三元条件运算符:条件为真时的值 if (条件表达式) else 条件为假时的值

    • num = input("请输入一个数字")
      print( num if int(num)<10 else "数字太大")
      
  • 多分支选择结构:

    ​ if 条件表达式 1 :

    ​ 语句 1/语句块1

    ​ elif 条件表达式 2:

    ​ 语句 2/语句块 2

    ​ …

    ​ …

    ​ elif 条件表达式 n:

    ​ 语句 n/语句块 n

    ​ else:

    ​ 语句 n+1/语句块 n+1

2. 循环结构
  • 概念:循环是用来重复执行一条或者多条语句。如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果为True则重复执行循环体里面的语句

  • while循环:条件表达式为真则执行循环体语句

    ​ while 条件表达式:

    ​ 循环体语句

  • for循环:通常用于可迭代对象的遍历

    ​ for 变量 in 可迭代对象:

    ​ 循环体语句

    • python包含下列几种可迭代对象:序列(字符串、列表、元组、字典),迭代器对象、生成器对象、生成器函数、文件对象。

    • d = {'name':'gaoqi','age':18,'address':'西三旗 001 号楼'}
      for x in d: #遍历字典所有的 key
      	print(x)
      for x in d.keys():#遍历字典所有的 key
      	print(x)
      for x in d.values():#遍历字典所有的 value
      	print(x)
      for x in d.items():#遍历字典所有的"键值对" 
          print(x)
      
    • 例一:利用 for 循环,计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和, 计算 1-100 之间奇数的累加和。

      • sum_all = 0 #1-100 所有数的累加和
        sum_even = 0 #1-100 偶数的累加和
        sum_odd = 0 #1-100 奇数的累加和
        for num in range(101):
        	sum_all += num
        	if num%2==0:
                sum_even += num
        	else:
                sum_odd += num
        print("1-100 累加总和{0},奇数和{1},偶数和{2}".format(sum_all,sum_odd,sum_even))
        
    • 例二:打印数字方阵

      • for x in range(5):
        	for y in range(5):
        		print(x,end="\t")
        	print() #仅用于换行
        
    • 例三:打印九九乘法表

      • for m in range(1,10):
        	for n in range(1,m+1):
        		print("{0}*{1}={2}".format(m,n,(m*n)),end="\t")
        	print()
        
  • break语句:可以用于while和for循环,用来结束整个循环,当有嵌套循环时,break语句只能跳出最近一层循环。

    while True:
    	a = input("请输入一个字符(输入 Q 或 q 结束)")
    	if a.upper()=='Q':
    		print("循环结束,退出")
    		break
    	else:
    		print(a)
    
  • continue 语句:用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最 近的一层循环。

  • else 语句:while和for两大循环语句可以附带一个else语句。如果for、while语句没有被break语句结束,则会执行else子句,否则不执行。

    ​ while 条件表达式:

    ​ 循环体

    ​ else:

    ​ 语句块

    ​ 或者:

    ​ for 变量 in 可迭代对象:

    ​ 循环体

    ​ else:

    ​ 语句块

  • 使用zip()并行迭代

    • names = ("高淇","高老二","高老三","高老四")
      ages = (18,16,20,25)
      jobs = ("老师","程序员","公务员")
      for name,age,job in zip(names,ages,jobs):
      	print("{0}--{1}--{2}".format(name,age,job))
      
  • 推导式创建序列

    • 列表推导式:

      • [表达式 for item in 可迭代对象 ]

      • [表达式 for item in 可迭代对象 if 条件判断]

      • >>> [x for x in range(1,5)]
        [1, 2, 3, 4]
        >>> [x*2 for x in range(1,5)]
        [2, 4, 6, 8]
        >>> [x*2 for x in range(1,20) if x%5==0 ]
        [10, 20, 30]
        >>> [a for a in "abcdefg"]
        ['a', 'b', 'c', 'd', 'e', 'f', 'g']
        
    • 字典推导式

      • 格式:{key_expression : value_expression for 表达式 in 可迭代对象}

      • >>> my_text = ' i love you, i love sxt, i love gaoqi' 
        >>> char_count = {c:my_text.count(c) for c in my_text}
        >>> char_count
        {' ': 9, 'i': 4, 'l': 3, 'o': 5, 'v': 3, 'e': 3, 'y': 1, 'u': 1, ',': 2, 's': 1, 'x': 1, 't': 1, 'g': 1, 'a': 1, 'q': 1}
        
    • 集合推导式

      • {表达式 for item in 可迭代对象 }

      • {表达式 for item in 可迭代对象 if 条件判断}

      • {x for x in range(1,100) if x%9==0}
        {99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}
        
    • 生成器推导式(生成元组)

      • 注意元组是没有推导式的,生成器推导式返回的是一个生成器对象,而且注意一个生成器对象只能运行一次,第一次迭代可以获得数据第二次迭代数据就没有了

        • >>> (x for x in range(1,100) if x%9==0)
          <generator object <genexpr> at 0x0000000002BD3048>
          >>> gnt = (x for x in range(1,100) if x%9==0)
          >>> for x in gnt:
          print(x,end=' ')
          9 18 27 36 45 54 63 72 81 90 99
          >>> for x in gnt:
          print(x,end='')
          >>>
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值