zoukankan      html  css  js  c++  java
  • 容器数据类型及其内置方法

    • 元组(Tuples)

    • 作用:能够存储多组数据的容器类型,形式跟List差不多,只不过是小括号不是中括号,并且其中的数据不能被修改

    • 内部原理:当定义了元祖时,内存开辟了新的区域来存放元祖中的数据元素,其中每个不同元素都占据着元祖中的内存空间及地址,如果该数据是不可变类型,一旦确定下来内存地址后,该数据就动弹不得,一生一世都居住在这个内存地址中。如果该数据是可变类型,由于修改其内容并不会变动内存地址,因此可变类型的数据在元组中是可以修改的。

    • 图示    大原则就是不允许修改内存元组中每个数据的内存地址,至于你是可变还是不可变,列表字典里面的数变出花来,也不关我事,               只要内存地址不变。

    •  
    • 定义

    • n = ('Messi',10,'Barcelona','Agentina','football',[2022,2008])
      print(type(n))      # 输出<class 'tuple'> 表明其是元组数据类型
      a = 'Messi'
      print(tuple(a))     # 输出字符串每个字符作为元素的元组
    • 切片以及按索引取值

    • n = ('Messi',10,'Barcelona','Agentina','football',[2022,2008])
      print(n[0:4])       # 切片取值 从索引0到索引4之间取值输出元组,顾头不顾尾: ('Messi', 10, 'Barcelona', 'Agentina')
      print(n[3])         # 同样也是切片取值,但是取得某一个索引值,输出字符串: Agentina
      n[5][0] = '2018'    # 修改元组中列表的数据,由于列表是可变类型,因此修改其中数据并不会改变其内存,也就不存在所谓修改元组的事情存在
      print(n)            # 输出 ('Messi', 10, 'Barcelona', 'Agentina')
      n[0] = 'cluo'       # 修改元组中的字符串等一些不可变类型的数据的时候,已经导致了内存地址的变化。
      print(n)            # 报错 TypeError: 'tuple' object does not support item assignment
    • 成员in or not in 运算和长度

    • print('cluo' in n)      # 判断'cluo'在不在元祖当中如果不在则输出False   
      print('Messi' in n)     # 输出True
      print(len(n))           # 输出元组中有几个数据
    • 循环和常用操作

    • x = (1,2,3,4,4,5,6,3,2)
      print(x.count(5))       # 统计元组中有多少个5 记数工具
      print(x.index(2,0,4))   # 在索引值范围(0到4)中输出2第一次出现的索引值
      print(x.index(3,0,4))   # 在索引值范围(0到4)中输出3第一次出现的索引值
      
      for item in x:
          print(item)         # 依次输出元组中的元素作为字符串

      值得注意的是:元组是一个不可变类型的数据,并且数据存储在元组之中是有序的。

    • 字典

    • 定义:用{}存放多个key:value值,其中key值必须是不可变类型(可hash)一般通常都用字符串类型,而value值可以是任意类型

    • dic={'name':'Messi','career':'Barcelona','nationality':'agentina'}
      print(dic,type(dic))        # 输出dic的数据类型 dict
      print(dic['name'])          # 索引为key值,输出value值
      dic={(1,2):'football'}      # 将另一个新字典赋到原字典的地址中
      print(dic)
      dic={[1,2]:'aaa'}           # 由于该key值是不可变类型也就是可hash类型 所以会报错 unhashable type: 'list'
      print(dic[(1,2)])           # 输出key值为(1,2)的value值
    • 建立一个新字典的两种方式

    • 方法1

    • dic2 = dict(name = 'messi', nationality = 'agentina', carrer = 'barcelona')
      print(dic2)
    • 方法2

    • dic3 = [['name','messi'],['nationality','agentina'],['carrer','barcelona']]
      dic4 = {}
      for k,v in dic3:        # 利用for循环将列表中数据按照key和value的形式赋值到字典中
          dic4[k] = v
      print(dic4)

      #与下方等价
      dic5 = dict(dic3)       # 将key和value值按照字典中的形式存放列表中然后通过dict方法输出字典
      print(dic5)
    • 按索引存取值

    • dic={'name':'Messi','career':'Barcelona','nationality':'agentina'}
      print(dic['name'])              # 通过key值对字典进行取值操作
      dic['career'] = 'FC'            # 进行修改value值得操作
      print(dic)
      dic['championship'] = 'many'    # 通过key值对字典进行存值操作  与list一样可存可取 
      print(dic)
    • 成员运算以及长度

      dic={'name':'Messi','career':'Barcelona','nationality':'agentina'}
      print(dic['name'])              # 通过key值对字典进行取值操作
      dic['career'] = 'FC'            # 进行修改value值得操作
      print(dic)
      dic['championship'] = 'many'    # 通过key值对字典进行存值操作  与list一样可存可取 
      print(dic)
    • 删除元素

    • del方法

    • dic={'name':'Messi','career':'Barcelona','nationality':'agentina'}
      del dic['name']     # 删除该key值所对应的键值对
      print(dic)
      del dic['xxx']      # 如果指定的key值不存在于字典之中,则报错
    • pop方法

    • ret1 = dic.pop('name')      # 返回key所对应的的value值
      print(dic)                  # 输出弹出即删除所对应的键值对的字典
      print(ret1)
      # 若key值不存在 则报错
    • popitem方法

    • res = dic.popitem()         # 返回的是最后一个键值对,返回的是元组类型  
      print(res)
      print(dic)                  # 输出{'name': 'Messi', 'career': 'Barcelona'}
    • 键值keys,values值和键值对的输出

    • print(dic.keys())
      l1 = []
      for k in dic.keys():
          l1.append(k)
      print(l1)                   # 输出所有keys的列表数据
      print(list(dic.keys()))     # 与上面的方法完全等价    
      print(list(dic.values()))   # 输出所有values值的列表
      print(list(dic.items()))    # 输出所有键值对元组的列表  [('name', 'Messi')。。。。]
    • 循环方法

    • dic={'name':'Messi','career':'Barcelona','nationality':'agentina'}
      for k in dic:
          print(k,dic[k])         # 输出键值对字符串
      
      for b in dic.keys():
          print(b,dic[b])         # 同样与上面的方法等价
      
      for v in dic.values():      # 输出values值的字符串
          print(v)
      
      for k,v in dic.items():     # 与输出键值对的方法等价
          print(k,v)
    • 根据key值获取value

    • dic={'name':'Messi','career':'Barcelona','nationality':'agentina'}
      
      v = dic.get('name')         # 根据其中的keys值来返回value值 如果不存在此key值则放回None        
      print(v)
    • 快速创建一个字典

    • li1 = ['name','nationality','career']      
      print(dict.fromkeys(li1,'messi'))       # 快速的创建一个字典,字典所对应的values统统是messi
    • update方法

    • dic1={'name':'Messi','career':'Barcelona','nationality':'agentina'}
      newdic = {'name':'messi','age':32,'nationality':'spanish'}
      dic1.update(newdic)                 # 更新dic1中的键值对 如果新的字典中存在旧字典中没有的键值,就在旧字典中增加没有的键值对。
      print(dic1)
    • setfault方法

      dic1={'name':'Messi','career':'Barcelona','nationality':'agentina'}
      res = dic1.setdefault('name','messi')       # 如果字典中有该keys值只不过value值不一样,那么就不修改字典,并且返回原字典的values值
      res2 = dic1.setdefault('sex','male')        # 如果字典中没有该keys值那么就在原来字典中添加该键值对,并且返回的是新键值对的values值
      print(res2)
      print(res)
      print(dic1)
      # 有则不改 无则加冕
    • 值得注意的是字典是一个无序类型的数据,因此只能通过键值对的一一对应来取值存值

    • 集合

    • 三原则

    1. 集合里面的元素必须是不可变类型即可hash类型
    2. 集合里面不允许存在重复的数据,虽然不会报错但是集合会自动去重
    3. 集合是一个无序的数据类型
    • 定义

    • na = {1,2,3,4,5,6,7,8}
      odd = {1,3,5,7,9}
      a = set((1,))       # 一种定义集合的方式就是用set方法输入元组
      print(a)
    • 集合的数学运算(交并集等)

    • na = {1,2,3,4,5,6,7,8}
      odd = {1,3,5,7,9}
      
      print(na & odd)             # 返回两者的交集
      print(na | odd)             # 返回两者的合集
      print(na ^ odd)             # 返回两者的合集-交集
      print(na - odd)             # 返回na中除odd有的元素
      print(odd - na)             # 返回odd中na没有的元素
    • 父集、子集和是否相等的运算

    • na = {1,2,3,4,5,6,7,8}
      odd = {1,3,5,7,9}
      
      na1 = {1,2,3,4,5,6,7,8,9}
      print(na1 >= odd)           # 判断na1是否为odd的父集 如果是的话则返回布尔值True
      print(odd <= na1)           # 判断odd是否为na1的子集
      print(na == na1)            # 判断两者的元素是否一模一样

       

    • 常用的操作

    • update操作

    • odd = {1,3,5,7}
      odd.update({9,11,13})       # 更新原集合中没有指定集合的元素,即在原集合中增加没有的元素
      print(odd)
    • 去除值的操作

    • odd = {1,3,5,7}
      print(odd.pop())        # 返回的是集合中的第一个元素
      print(odd)
    • odd = {1,3,5,7}
      
      print(odd.remove(3))      # 返回的None 就只是单纯的删除而已
      print(odd)
    • odd = {1,3,5,7}
      
      print(odd.discard(3))      # 返回的None 就只是单纯的删除而已
      print(odd)
    • discard和remove两者的区别是,假如删除了集合中不存在的元素,discard方法不会报错,而remove方法会报错  

  • 相关阅读:
    our毕业短片
    Android Memory Management, OutOfMemoryError
    android autoswitched ImageSwitcher
    Storage size of Bitmap
    Frequentlyused URI of Intent
    小知识: 软件版本号讲解: 什么是Alpha, Beta, RC
    JSF框架中使用的设计模式介绍
    Unicode编码表/00000FFF
    Spring事务的传播行为和隔离级别
    领略Spring 3.x 时代的Spring MVC
  • 原文地址:https://www.cnblogs.com/ITchemist/p/11134925.html
Copyright © 2011-2022 走看看