Python学习总结【连载】(六)

Python学习总结【连载】(六)

2018.06.20 Juttachen


概述

+ 21 列表补充

+ 22 元组

  • 概念
  • 元组的查
  • 元组的运算符计算

+ 23 字典

  • 概念
  • 字典的查增删改
  • 字典的方法和运算符计算

+ 24 集合

  • 概念
  • 集合的查增删
  • 集合的数学运算

二十一、列表补充

1.关于对象

列表的值[a,b,c],类型是对象
对象类型:列表、字典、集合、元组、通过类创建的对象
变量在存储对象数据的时候,存的对象保存在内存中的地址。
如果用存对象的变量给另外一个变量赋值,赋的是地址

    list1 = [1,2,3,4]
    list2 = list1
    list2[0] = 10
    print(list2)
    print(list1)

对象赋值的时候就会出现以上情况,两个变量指向同一个对象,任意变量改变一次对象,
另一个变量也会变,如果是有序的变量可以通过切片来避免这种问题(切片就是创建新的对象了)
或者用内置函数来拷贝
注意:如果变量里存的对象,要注意赋值的时候如果不想要两个变量相互影响,
就不要直接赋值而是拷贝对象产生新的对象然后赋值

    list2 = list1[:]
    list3 = list1.copy()
    list3[1] = 100
    list2[0] = 10
    print(list1)
    print(list2)
    print(list3)

二十二、元组

1.概念

元组(tuple)就是不可变的列表
列表中除了增加、修改和删除相关的操作,其他都适用于元组。

什么时候用?就是存到容器中的数据不能被修改的时候使用,
比如:星期几对应的值
a. 声明元组

    tuple1 = (1,2,3,4,'aa',True)
    print(tuple1)

2.元组的查

    print(tuple1[0])
    print(tuple1[-1])
    print(tuple1[:3])

    for item in tuple1:
        print(item)

    for index in     range(len(tuple1)):
        print(tuple1[index])

3.元组的运算符计算

a.+,*运算

    print((1,2,3)+("a","b"))
    print((1,"a") * 3)

b. in ,not in

    a = 10
    print(a in (10,2,9,9))
    print(a not in (10,2,9,9))

其他的增删改是不行的,tuple是不可变的,个数和元素都不能变

练习:输入1-7的数字,对应输入是星期几。如:输入1,就输出‘星期一’,输入7就输出‘星期日’

    num1 = int(input('请输入1-7中任意数字:'))
    tuple2 = ('星期一','星期二','星期三','星期四','星期五','星期六','星期日')
    print(tuple2[num1-1])
    # 注意:不要乱加条件,或者运行过程。

二十三、字典

字典是一个容器类的数据类型,以键值对(key:value)的形式来存储数据。
特点:字典是可变的(说明可以增删改查),但是是无序的(不能使用下标改变元素)。
键值对:以键:值的形式存在。我们真正要存的是值。
值可以是任何类型的数据;键理论上只能是不可变的数据类型的数据,在实际开发中一般用字符串

1.定义/声明一个字典(dict)

    dict1 = {'name':'罗浩','age':18} # 声明了一个字典对象,存了两个键值对
    dict2 = {'score':100,10:'aaa',(1,3):[10,23]}
    print(dict2)
    
    # dict3 = {[10,12]:'abc'}
    # print(dict3)
    # 键不能是可变的,报错:TypeError: unhashable type:'list'

声明一个字典,存小明的姓名、年龄、成绩、颜值

    dict4 = {'name':'小明','age':18,'score':100,'face':90}
    print(dict4)

2.字典的查增删改

a.查

1) 通过key去获取值

格式:字典名[key值]

    print(dict4['age'])
    # print(dict4['abc']) 字典中没有这个键,报错: KeyError:'abc'
2) 通过get方法获取值

格式:字典名.get(key)
什么时候用?获取字典中,不确定key对应的键值对是否存在的时候,就使用get方法

    print(dict4.get('name'))
    print(dict4.get('abe')) #结果是None
    # None:python中的一个特殊值,表示没有,类似C中的NULL

练习:获取字典中的‘grade’对应的值,如果grade不存在就打印不存在,否则出值

    str1 = dict4.get('grade')
    if str1 == None:
        print('不存在')
    else:
        print(str1)
3)遍历字典

注意:字典没有像列表的切片,要取多个只能用遍历字典
直接遍历字典拿到的是字典所有的key值,要拿值的话就通过key来做

    dict4 = {'a':1,'b':2,'c':3}
    for key in dict4:
        print(key,dict4[key])



    print(dict4.items())
    for (key,value) in dict4.items():
        print(key,value)
    # 同时拿到key和value,但不推荐,因为在获取键值对前,需要有转换操作,计算机会消耗太多的cpu。

b.修改

通过Key去拿到对应的元素,然后重新赋值

    dict4 = {'a':1,'b':2,'c':3}
    dict4['a'] = 10
    print(dict4)
  • 练习:将上面的字典中所有的值变为原来的三倍*

      dict4 = {'a':1,'b':2,'c':3}
      for key in dict4:
          dict4[key] *= 3
      print(dict4)
    

c.增加

通过key取值,然后赋值(如果这个key不存在,就是添加键值对。如果key存在,就是修改这个Key对应的值)
由此可知:字典里面key一定是唯一的,而且不可变的。如果一个key写出了两个值,那么只有最后那个的值有意义,其他的都被销毁。

练习:增加键值对:'d':4

    dict3 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
    dict3['d'] = 4
    print(dict3)

    dict5 = {}
    dict5['name'] = '张山'
    dict5['color'] = 'red'
    dict5['color'] = 'green'
    print(dict5)

d.删除

(删除的是键值对,一个被销,另一个也会消失)
a.del语句
格式:del 字典[key]

    dict1 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
    del dict['b'] # 删除‘b’对应的键值对
    print(dict1)

b.pop()方法
格式:字典.pop(key)

    dict1.pop('a')
    pirnt(dict1,result)

    dict1 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
    dict1.popitem() #popitem方法:随机删除(取出)一个元素


    dict1 =   {'a':1,'str':'string','b':2.5,'c':False,'d':[1,2,3]}

练习:将字典中,值为字符串的全部删除

    for key in dict1.copy():
        num = dict1[key]
        if isinstance(dict2[key],str):
            dict1.pop(key)
    print(dict1)

3.字典的方法和运算符计算

a.keys和values方法

keys:获取字典中所有的key
values:获取字典中所有的值

    dict1 = {'a':1,'b':2,'c':3}
    print(dict.keys())
    print(dict1.values())

b.update方法

字典.update(字典2):用字典2中的元素去更新字典1中的元素(如果字典2中的键值对字典没有,就直接添加。有的话就修改)

    dict1.update({'a':1,'b':2.5,'c':False,'d':[1,2,3]})
    print(dict1)

c.in 和 not in

判断字典中是否有指1定的key

    print('a' in dict1)
    print(100 in dict1)

二十四、集合

1.概述

集合也是一种容器类型
特点:无序的
元素的值是唯一的(不能重复)
数据存取是通过{}去存储元素,多个元素之间用逗号隔开。

声明一个集合

    set1 = {1,2,3,4,1,10} # 结果是:{1,2,3,4,10}
    print(set1)
    # 将其他数据转换为集合的话,自带去重功能
    # 将字符串转换成集合
    set2 = set('abcdefjssbb')
    print(set2)

常用的是:各种数据的相互转化

将列表转换成集合(当然元组也可以)

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

将字典转换成集合(是将字典的key取出来作为集合的元素)

    set4 = set({'a':1,'b':2,'c':3})
    print(set4)

2.集合的查增删

a.查

在集合中不能单独获取某一个元素或部分元素,只能通过遍历的方式去获取每一个元素。
练习:将字符串str1 = 'abdaadhjkjjhks'去重

    str1 = 'abdaadhjkjjhks'
    set1 = set(str1)
    str2 = ''
    # 遍历集合
    for x in set1:
        str2 += x
    str1 = str2
    print(str1)
    # 注意:顺序是不能控制的

b.增加

1)通过update增加:集合1.update(集合2):将集合2中的元素添加到集合1中。

    set1 = set('123456')
    set2 = set('abcd1')
    set1.update(set2)
    print(set1)

2)add:集合.add(元素):将指定的元素添加到指定的集合中。

    set1.add('aaa')
    print(set1)

c.删除

集合.remove(元素):将指定的元素从集合中删除,如果不存在则报错。

    set1.remove('1')
    print(set1)

3.集合的数学运算

python中的集合除了拥有作为容器相关的操作以外,还拥有数学中集合的相关操作

a.判断包含关系:>=,<=

    set1 = set('abczef')
    set2 = set('abcg')

集合1>=集合2:判断集合1中是否包含集合2,结果是布尔值

    print(set1 >= set2)

集合1 <= 集合2:判断集合2中是否包含集合1

    print(set1 <= set2)

b.|,&,-,^

    set1 = set('123456')
    set2 = set('456789')

| :求并集,在两个集合中所有的元素

    print(set1 | set2)

& :求交集,两个集合都有的元素

    print(set1 & set2)

-:在集合1中但是不在集合2中的所有元素

    print(set1 - set2)

^:获取集合1和2中,除了公共部分以外的所有的元素

    print(set1 ^ set2)

c.copy

将set1中所有的元素取出来,创建一个新的集合。

    print(set1.copy())

什么时候用集合?
功能涉及到数学集合相关的操作的时候,就要想到用集合。

你可能感兴趣的:(Python学习总结【连载】(六))