python学习笔记4

python学习笔记4

一、列表的常用操作

​ 列表是python常用的容器型数据类型,它里面可以存储任意类型的数据。python中的列表是有序的,可以索引和切片。

  1. 索引

    li = ['a',1,['b',2],'name']
    li[0] # a
    li[2] # ['b',2]
    li[-1] # name
    # python中索引都是从0开始
    
  2. 切片

    li = ['a',1,['b',2],'name']
    li[1:] # [1,['b',2],'name']
    li[3:] # ['name']
    # 列表切片返回的仍然是一个列表
    li[4:] # []
    
  3. 列表的创建方式

    # 1、直接向[]中放入元素
    li = ['a',1,['b',2],'name']
    
    # 2、使用list函数将iterable转化为列表
    l1_1 = list(iterable) # list函数参数为可迭代对象
    
    # 3、列表推导式
    li_2 = [i for i in range(10)]
    print(li_2) # [0,1,2,3,4,5,6,7,8,9]
    
  4. 列表增添元素

    li = ['a',1,['b',2],'name']
    # 1.append在列表末尾加入一个新元素
    li.append('new')
    print(li) # ['a', 1, ['b', 2], 'name', 'new']
    
    # 2.insert在列表指定位置插入一个新元素
    li.insert(2,'666')
    print(li) # ['a', 1, '666', ['b', 2], 'name', 'new']
    
    # 3.extend往列表末尾迭代增加
    li.extend('abcd')
    print(li) # ['a', 1, '666', ['b', 2], 'name', 'new', 'a', 'b', 'c', 'd']
    li.extend(['believe','trust'])
    print(li) # ['a', 1, '666', ['b', 2], 'name', 'new', 'a', 'b', 'c', 'd', 'believe', 'trust']
    
  5. 列表删除元素

    li = ['a',1,['b',2],'name','b','c','d','name']
    # 1.pop按照索引删除,返回被删除的元素(默认删除最后一个元素)
    print(li.pop(2)) # ['b',2]
    print(li) # ['a', 1, 'name', 'b', 'c', 'd', 'name']
    
    # 2.remove删除指定元素,默认删除从左数第一个
    li.remove('name')
    print(li) # ['a', 1, 'b', 'c', 'd', 'name']
    
    # 3.clear清空列表元素,保留空列表
    li.clear()
    print(li) # []
    
    # 4.del删除选定部分
    li_1 = ['a','b','c','d','e','f']
    # 每两个元素删除一个
    del li_1[::2] 
    print(li_1) # ['b', 'd', 'f']
    
  6. 列表修改元素

    li = ['a','b','c','d','e','f']
    # 1.指定位置赋值修改
    li[0] = '666'
    print(li) # ['666', 'b', 'c', 'd', 'e', 'f']
    
    # 2.切片迭代修改
    li[2:4] = '12345678'
    print(li) # ['666', 'b', '1', '2', '3', '4', '5', '6', '7', '8', 'e', 'f']
    
    # 3.按固定步长切片修改
    li = ['a','b','c','d','e','f']
    li[::2] = '234'
    print(li) # ['2', 'b', '3', 'd', '4', 'f']
    # 如果取出来的值跟修改值个数不相等时程序会报错
    li[::2] = '6789'
    print(li) # 程序会报错
    # ValueError: attempt to assign sequence of size 4 to extended slice of size 3
    
  7. 列表查找元素

    # 利用for循环查找每个元素
    li = ['a','b','c','d','e','f']
    for alph in li:
    	print(alph)
        
    '''
    a
    b
    c
    d
    e
    f
    '''
    

二、数据类型的分类

  • 可变(不可哈希)的数据类型:list, dict, set
  • 不可变(可哈希)的数据类型:str, bool, int, float, tuple

可哈希与不可哈希:

  • python中对于可哈希的对象是这样描述的:An object is hashable if it has a hash value which never changes during its lifetime (it needs a hash() method), and can be compared to other objects (it needs an __ eq__() or cmp(). Hashable objects which compare equal must have the same hash value.

  • 对于 Python 的内建类型来说,只要是创建之后无法修改的(immutable)类型都是 hashable 如字符串,可变动的都是 unhashable的比如:列表、字典、集合,他们在改变值的同时却没有改变id,无法由地址定位值的唯一性,因而无法哈希。我们自定义的类的实例对象默认也是可哈希的(hashable),而hash值也就是它们的id()。

三、字典的常用操作

  1. 在列表存储的大量数据中,数据之间的关联性并不强,并且列表的查询速度比较慢,当列表中存取大量数据时,查询时非常费劲。

  2. 字典的基本形式

    # 创建一个简单的字典
    dict_1 = {'name':'Alice','age':18,'sex':'male'}
    # dict_1就是一个字典
    # 'name':'Alice'是这个字典中一个基本的元素,它是键值对的形式
    
  3. 字典中键必须是不可变的数据类型,即可哈希的类型(一般为int或者str),而且是唯一的。

  4. 值可以是任意数据类型,对象。

  5. 字典占据内存大,但是查询速度特别快,相当于用存储空间换取了查询的时间。

  6. 字典的其他创建方式

    # 1.利用元组的拆包
    dict_1 = dict((('a',1),('b',2),('c',3)))
    print(dict_1) # {'a': 1, 'b': 2, 'c': 3}
    
    # 2.
    dict_2 = dict(a=1, b=2, c=3)
    print(dict_2) # {'a': 1, 'b': 2, 'c': 3}
    
    # 3.
    dict_3 = dict({'a': 1, 'b': 2, 'c': 3})
    print(dict_3) # {'a': 1, 'b': 2, 'c': 3}
    
  7. 字典增加元素

    dict_1 = {'name':'Alice','age':18}
    # 1.利用键增加一个新元素,由于键是唯一的,所以键不能与已有的键相同
    dict_1['sex'] = 'male'
    print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male'}
    # 如果字典中已有输入的键,则会修改键对应的值
    
    # 2.利用setdefault()方法,没有输入值时默认是None
    dict_1.setdefault('hobby')
    print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male', 'hobby': None}
    # 也可以输入值使其称为键对应的值
    dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'}
    dict_1.setdefault('hobby','玩游戏')
    print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male', 'hobby': '玩游戏'}
    # 如果字典中已有输入的键,不会修改键对应的值
    
  8. 字典删除元素

    dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'}
    # 用pop按字典的键删除
    print(dict_1.pop('age')) # 18  返回的是删除的键所对应的值
    print(dict_1) # {'name': 'Alice', 'sex': 'male'}删除了选定的键值对
    # 当用pop来删除原字典中没有的键时:
    print(dict_1.pop('hobby')) # KeyError: 'hobby'   程序报错
    print(dict_1.pop('hobby','没有这个键')) # 没有这个键    
    # 如果没有该键,返回的是设置的值
    
    # clear,清空字典
    dict_1.clear()
    print(dict_1) # {}
    
    # del删除指定键
    dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'}
    del dict_1['age']
    print(dict_1) # {'name': 'Alice', 'sex': 'male'}
    # 此时dict_1中没有age,在执行del dict_1['age']会报错
    del dict_1['age']
    # KeyError: 'age'
    
  9. 字典修改元素

    # 直接利用已有键进行索引修改
    dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'}
    dict_1['age'] = 25
    print(dict_1) # {'name': 'Alice', 'age': 25, 'sex': 'male'}
    
    # update方法
    dict_1 = {'name': 'Alice', 'age': 18}
    dict_1.update(sex = 'male')
    print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male'}
    
    dict_1 = {'name': 'Alice', 'age': 18}
    dict_1.update([('sex','male'),('hobby','玩游戏')])
    print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male', 'hobby': '玩游戏'}
    
    dict_1 = {'name': 'Alice', 'age': 18}
    dict_2 = {'name':'Believe','age':20,'hobby':'玩游戏'}
    dict_1.update(dict_2)
    print(dict_1) # {'name': 'Believe', 'age': 20, 'hobby': '玩游戏'}
    
  10. 字典查询元素

    # 直接根据键进行索引查询,如果键不存在则报错
    dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'}
    print(dict_1['age']) # 18
    print(dict_1['hobby']) # KeyError: 'hobby'
    
    # get方法
    print(dict_1.get('age')) # 18
    print(dict_1.get('hobby')) # None
    print(dict_1.get('hobby','没有此键')) # 没有此键
    
  11. keys()、value()、items()

    dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'}
    print(dict_1.keys()) # dict_keys(['name', 'age', 'sex'])
    print(dict_1.values()) # dict_values(['Alice', 18, 'male'])
    print(dict_1.items()) 
    # dict_items([('name', 'Alice'), ('age', 18), ('sex', 'male')])
    
    # 可以结合元组的拆包和字典的items方法使用
    for key,value in dict_1.items():
        print(key,value)
    '''
    name Alice
    age 18
    sex male
    '''
    
  12. 字典是可以嵌套的。

posted @ 2020-03-16 16:59  卡奇欧  阅读(93)  评论(0)    收藏  举报