zoukankan      html  css  js  c++  java
  • python数据类型2

    1. 列表、元组

    列表

    特性:有序的,可修改。

    任意的成员都可以通过下标来进行访问。话句话说,Python 对列表数据中的所有成员按序编号,称为索引,从而实现对成员变量的访问和修改。

    1. 定义

      names = ['Alex',"Tenglan",'Eric']
      
    2. 增加

      names.append("我是新来的")
      
    3. 修改

      >>> names = ['Alex',"Tenglan",'Eric']
      >>> names[1]='Tom'
      >>> names
      ['Alex', 'Tom', 'Eric']
      
    4. 删除

      name.remove('Alex')
      name.pop()
      name.pop(i)   #i是列表元素的下标,对应删除
      
    5. 插入

      >>> names = ['Alex',"Tenglan",'Eric']
      >>> names.insert(1,"shabi")
      >>> names
      ['Alex', 'shabi', 'Tenglan', 'Eric']
      
    6. 拓展

      names1 = ['Alex',"Tenglan",'Eric']
      names2 = ['1','2','3']
      names1.extend(names2)
      >>> names1
      ['Alex', 'Tenglan', 'Eric', '1', '2', '3']
      
    7. 拷贝

    • 浅复制(适合无嵌套字典列表)

      import copy
      names1 = ['Alex',"Tenglan",'Eric']
      #四种浅复制的方式
      names2 = names1[:] 
      names3 = names1.copy()
      names4 = copy.copy(names1)
      names5 = list(names1)
      
    • 深复制(适合嵌套字典列表)

      names1 = ['Alex',"Tenglan",'Eric']
      names2 = copy.deepcopy(names1)
      
      • 例子1

        import copy
        print("----list_1=list_2,内存指向同一空间----")
        list_1 = [
            "Alex", "money", {"names": "Tom"},2
        ]
        list_2 = list_1
        list_1[0] = "shabi"
        list_1[2]["names"] = "doubi"
        list_1[3]=4
        print(list_1)
        print(list_2)
        
        print("----浅复制1----")
        list_1 = [
            "Alex", "money", {"names": "Tom"},2
        ]
        list_2 = list_1.copy()
        list_1[0] = "shabi"
        list_1[2]["names"] = "doubi"
        list_1[3]=4
        print(list_1)
        print(list_2)
        
        print("----浅复制2----")
        list_1 = [
            "Alex", "money", {"names": "Tom"},2
        ]
        list_2 = list(list_1)
        list_1[0] = "shabi"
        list_1[2]["names"] = "doubi"
        list_1[3]=4
        print(list_1)
        print(list_2)
        
        print("----浅复制3----")
        list_1 = [
            "Alex", "money", {"names": "Tom"},2
        ]
        list_2 = list_1[:]
        list_1[0] = "shabi"
        list_1[2]["names"] = "doubi"
        list_1[3]=4
        print(list_1)
        print(list_2)
        
        print("----浅复制4----")
        list_1 = [
            "Alex", "money", {"names": "Tom"},2
        ]
        list_2 = copy.copy(list_1)
        list_1[0] = "shabi"
        list_1[2]["names"] = "doubi"
        list_1[3]=4
        print(list_1)
        print(list_2)
        
        print("----深复制----")
        list_1 = [
            "Alex", "money", {"names": "Tom"},2
        ]
        list_2 = copy.deepcopy(list_1)
        list_1[0] = "shabi"
        list_1[2]["names"] = "doubi"
        list_1[3]=4
        print(list_1)
        print(list_2)
        
        print("----字符和数字类型------")
        a = 5
        b = a
        a = 7
        print(a, " ", b)
        
        print("----字典和列表类型------")
        a = [1, 2, 3]
        b = a
        a [0] = 4
        print(a, " ", b)
        
    1. 统计

      num = [1,2,3,2,4,5,7]
      >>> num.count(2)
      2
      >>> num.count(1)
      1
      
    2. 排序

      num = [1,2,3,2,4,5,7]
      >>> num.sort()
      >>> num
      [1, 2, 2, 3, 4, 5, 7]
      
    3. 获取下标

      • 第一种方法:知道列表的值(重复的获取第一个的值)

        num = [1,2,3,2,4,5,7]
        >>> num.index(3)
        2
        >>> num.index(2)
        1
        
      • 第二种方法:遍历整个列表获取的下标值

        num = [1,2,3,2,4,5,7]
        for i,j in enumerate(num):
        	print(i," ",j)  #i是列表的下标,j是列表的元素
        
    4. 切片

      >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
      >>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
      ['Tenglan', 'Eric', 'Rain']
      >>> names[1:-1] #取下标1至-1的值,不包括-1
      ['Tenglan', 'Eric', 'Rain', 'Tom']
      >>> names[0:3] 
      ['Alex', 'Tenglan', 'Eric']
      >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
      ['Alex', 'Tenglan', 'Eric']
      >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
      ['Rain', 'Tom', 'Amy'] 
      >>> names[3:-1] #这样-1就不会被包含了
      ['Rain', 'Tom']
      >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
      ['Alex', 'Eric', 'Tom'] 
      >>> names[::2] #和上句效果一样
      ['Alex', 'Eric', 'Tom']
      >>> names[::-1]#倒序
      ['Amy', 'Tom', 'Rain', 'Eric', 'Tenglan', 'Alex']
      

    元组

    特性:有序的,只读的。

    只有访问和统计两种方法

    1. count
    2. index

    2.字典

    特性:无序,可修改,key是唯一值

    1. 定义

      info = {
          'stu1101': "TengLan Wu",
          'stu1102': "LongZe Luola",
          'stu1103': "XiaoZe Maliya",
      }
      
    2. 增加

      >>> info['stu1104'] = "卡萨丁"
      >>> info
      {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': '卡萨丁'}
      
    3. 修改

      >>> info['stu1104'] = "阿萨姆"
      >>> info
      {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': '阿萨姆'}
      
      
    4. 删除

      • 方法1,pop 返回删除的值

        >>> info
        {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': '阿萨姆'}
        >>> info.pop('stu1101')
        
        
      • 方法2,del 没有返回值

        >>> info
        {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': '阿萨姆'}
        >>> del info['stu1101']
        
        
      • 方法3 随机删除 返回key-value的元组

        >>> info = {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': '阿萨姆'}
        >>> info.popitem()
        ('stu1104', '阿萨姆')
        
        
    5. 查找

      方法1:通过key值获取(当key不存在的时候会报错,最好获取前判断key in dict)

      方法2:get方法(当key不存在的时候不会报错)

      >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
      >>> "stu1102" in info #标准用法
      True
      >>> info.get("stu1102")  #获取,找不到默认返回None
      'LongZe Luola'
      >>> info["stu1102"] #同上,但是看下面
      'LongZe Luola'
      >>> info["stu1105"]  #如果一个key不存在,就报错,get不会,不存在只返回None
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      KeyError: 'stu1105'
      
      
    6. 遍历字典

      #方法1
      for key in info:
          print(key,info[key])
      
      #方法2
      for k,v in info.items(): #会先把dict转成list,数据里大时莫用
          print(k,v)
      
      
    7. 常用函数

      #values
      >>> info.values()
      dict_values(['LongZe Luola', 'XiaoZe Maliya'])
      
      #keys
      >>> info.keys()
      dict_keys(['stu1102', 'stu1103'])
      
      
      #setdefault
      >>> info.setdefault("stu1106","Alex")
      'Alex'
      >>> info
      {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
      >>> info.setdefault("stu1102","龙泽萝拉")
      'LongZe Luola'
      >>> info
      {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
      
      
      #update 
      >>> info
      {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
      >>> b = {1:2,3:4, "stu1102":"龙泽萝拉"}
      >>> info.update(b)
      >>> info
      {'stu1102': '龙泽萝拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
      
      #items
      info.items()
      dict_items([('stu1102', '龙泽萝拉'), (1, 2), (3, 4), ('stu1103', 'XiaoZe Maliya'), ('stu1106', 'Alex')])
      
      
      #通过一个列表生成默认dict,有个问题如下:fromkeys 函数把所有 key 都指向了同一个空列表。改动其中任何一个,其他的都改掉了。
      >>> a = dict.fromkeys([1,2,3],[])
      >>> a
      {1: [], 2: [], 3: []}
      >>> a[1].append(1)
      >>> a
      {1: [1], 2: [1], 3: [1]}
      
      

    3.集合

    特性:无须,无重复

    作用:

    • 去重,把一个列表变成集合,就自动去重了
    • 关系测试,测试两组数据之前的交集、差集、并集等关系
    s = set([3,5,9,10])      #创建一个数值集合  
      
    t = set("Hello")         #创建一个唯一字符的集合  
    
    
    a = t | s          # t 和 s的并集  
      
    b = t & s          # t 和 s的交集  
      
    c = t – s          # 求差集(项在t中,但不在s中)  
      
    d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
      
       
      
    基本操作:  
      
    t.add('x')            # 添加一项  
      
    s.update([10,37,42])  # 在s中添加多项  
      
       
      
    使用remove()可以删除一项:  
      
    t.remove('H')  
      
      
    len(s)  
    set 的长度  
      
    x in s  
    测试 x 是否是 s 的成员  
      
    x not in s  
    测试 x 是否不是 s 的成员  
      
    s.issubset(t)  
    s <= t  
    测试是否 s 中的每一个元素都在 t 中  
      
    s.issuperset(t)  
    s >= t  
    测试是否 t 中的每一个元素都在 s 中  
      
    s.union(t)  
    s | t  
    返回一个新的 set 包含 s 和 t 中的每一个元素  
      
    s.intersection(t)  
    s & t  
    返回一个新的 set 包含 s 和 t 中的公共元素  
      
    s.difference(t)  
    s - t  
    返回一个新的 set 包含 s 中有但是 t 中没有的元素  
      
    s.symmetric_difference(t)  
    s ^ t  
    返回一个新的 set 包含 s 和 t 中不重复的元素  
      
    s.copy()  
    返回 set “s”的一个浅复制  
    
    

    4.文件

    对文件操作流程

    1. 打开文件,得到文件句柄并赋值给一个变量
    2. 通过句柄对文件进行操作
    3. 关闭文件

    关键函数

    open()

    open(name[, mode[, buffering]])
    
    

    参数说明:

    • name : 一个包含了你要访问的文件名称的字符串值。
    • mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
    • buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

    不同模式打开文件的完全列表:

    模式 描述
    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    三种方式

    方法1.直接open(),close()

    f = open('lyrics') #打开文件,默认是读取
    data = f.read()# 对文件读取
    f.close() #关闭文件
    
    

    方法2.try..finally open().close()

    比方法1安全,比如说文件操作出错,后续的程序不再运行,通过finally保证安全关闭文件

    try:
    	f = open('lyrics') #打开文件,默认是读取
    	data = f.read()# 对文件读取
    finally:
    	f.close() #关闭文件
    
    

    方法3.with语法

    with open('log1') as obj1, open('log2') as obj2:
        pass
    
    

    常用文件操作

    • file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。
    • file.readline():返回一行。
    • file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。
    • for line in f: print line :通过迭代器访问。
    • f.write("hello "):如果要写入字符串以外的数据,先将他转换为字符串。
    • f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的比特数)。
    • f.seek(偏移量,[起始位置]):用来移动文件指针。
      • 偏移量: 单位为比特,可正可负
      • 起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
    • f.close() 关闭文件
  • 相关阅读:
    chrome 插件 初探
    正则表达式循环匹配
    pa week 28
    ToString()格式和用法大全(转自http://heromaimx.diandian.com/post/20100713/17583851)
    PreSubclassWindow详细分析(转自http://blog.csdn.net/liu_cheng_ran/article/details/7571843)
    根据控件类型,动态查找ItemTemplate的控件
    多线程死锁问题(转自http://blog.csdn.net/yqh5566/article/details/6625336)
    DDX_Control的作用(转自http://blog.csdn.net/yangtalent1206/article/details/6242529)
    通过SOAP请求与Microsoft Dynamic CRM online服务器进行连接
    MulDiv(转自http://st251256589.blog.163.com/blog/static/164876449201152184617407/)
  • 原文地址:https://www.cnblogs.com/akiz/p/11144272.html
Copyright © 2011-2022 走看看