zoukankan      html  css  js  c++  java
  • Python入门学习笔记01(常用数据类型)

    • 常用数据类型

    从语法角度看,Python和C、C++ 等常用语言最明显的区别就是变量定义的时候无需指定数据类型,变量的类型通过赋值指定,但需要注意的是Python仍然是一门强类型语言,变量一经赋值要变成其他类型必须经过强制类型转换。另一个不同点在于Python代码的强制缩进,通过缩进实现的是C/C++语言中大括号代码块的功能。初接触这一点对熟悉C/C++的人来说相当的别扭,如果使用Python原生的IDLE敲代码出错的可能性相当的高,幸好有PyCharm之类的神器能够辅助我们。

    下面进入主题,Python中的常用数据类型有一下六种:
    1. 数(Number)
    2. 字符串(String)
    3. 集合(Set)
    4. 列表(List)
    5. 数据字典(Dictionary)
    6. 元组(Tuple)
    • Number
    Python3中整型数据只有一种,既长整型,而Python2中区分int和long
    • String
    字符串中的转义字符可以通过在字符串前添加r来进行取消,如:
     
    输入
    print("hello\nworld!")
    输出
    hello
    world!
    输入
    print(r"hello\nworld!")
    输出
    hello\nworld!
    注意与C/C++不同,字符串可以通过下标访问,但是不可以赋值。
    下面代码会报错:
    var1 = "abcd"
    var1[3] = "e"
    字符串可以通过下标实现截取,格式为str[头下标:尾下标],下标为负数表示从最后一个字符算起
    下标的原则为“顾头不顾尾”,既左开右闭
     
    输入:
    var1 = "abcdefg"
    print(var1[1:])
    print(var1[1:2])
    print(var1[1:-1])
    输出:
    bcdefg
    b
    bcdef
    • set
    创建集合可以通过{}或者set()函数,但是创建空集合只能用set()函数,因为{}是用来创建空字典的。frozenset()返回一个不可变的集合,即没有add、pop等方法的set
    集合本质上是一组无序不重复数据的集合,集合会自动去除重复元素。
     
    输入:
    var1 = {"1","2","3","1","2"}
    print(var1)
    输出:
    {'2', '3', '1'}
     
    集合的另一个基本功能是进行集合元素间的差并集操作。
     
    输入
    var1 = set("abcde")
    var2 = set("de11")
    #差集
    print(var1 - var2)
    print(var1.difference(var2))
    #并集
    print(var1 | var2)
    print(var1.union(var2))
    #交集
    print(var1 & var2)
    print(var1.intersection(var2))
    #不同时存在于两个集合
    print(var1 ^ var2)
    print(var1.symmetric_difference(var2))
     
    输出
    {'a', 'b', 'c'}
    {'a', 'b', 'c'}
    {'a', 'c', 'b', '1', 'd', 'e'}
    {'a', 'c', 'b', '1', 'd', 'e'}
    {'d', 'e'}
    {'d', 'e'}
    {'a', 'b', '1', 'c'}
    {'a', 'b', '1', 'c'}
    
    添加元素使用add和update,add一次添加一个元素,update一次添加多个,所以当使用一个字符串作为参数时,add将整个字符串作为一个元素添加,update将会字符串拆分为字符进行添加
    var1 = set("1234")
    var1.add("dell")
    print(var1)
    var1.update("dell")
    print(var1)

    输出

    {'3', 'dell', '1', '2', '4'}
    {'l', 'd', '3', 'dell', '1', '2', 'e', '4'}
    

      

    移除集合元素使用remove和discard,区别在于前者删除一个不存在的元素时会抛出异常,后者不会。

     
    • List
    1. 列表通过[]创建,与字符串一样也可以通过下标进行截取。
    2. 列表通过index(data)获取第一个匹配的数据的位置,注意如果查询不到会抛出异常
    3. 列表通过count(data)统计data在列表中出现的次数
    4. sort()函数可以对list函数进行排序,但是会打乱原始列表的顺序,排序的顺序按照ASCII码,既特殊字符、数字、大写字母、小写字母。如果不想打乱原始List的顺序可以使用sorted(list)产生一个新的列表。
    5. List通过append和insert进行数据的追加,append固定追加在最后,insert(index,data)在列表的index位置插入数据。
    6. list有三种删除数据的方法:
    • remove(data),删除列表中第一个查找到的data
    • del list[index],删除index位置的数据
    • pop(index),删除index位置的数据,默认为最后一个

      list的拷贝分为浅拷贝和深拷贝两种,深拷贝是完全取得list的一份拷贝,浅拷贝只会将第一层进行完全的拷贝,对于引用类型的数据则只是拷贝了一个地址

    •  浅拷贝的三种方式
        • list2 = list(list1)
          list3 = list1.copy()
          list4 = list1[:]

    • 深拷贝
      • list5 =copy.deepcopy(list1)

    import copy
    #浅copy的特点是只会将第一层进行完全的拷贝,对于引用类型的数据则只是拷贝了一个地址
    #浅copy的三种方式
    list1 = ["beijing","shanghai","shenzhen",["beijing","haiding"]]
    list2 = list(list1)
    list3 = list1.copy()
    list4 = list1[:]
    #深拷贝是对所有数据就行了一次完全的拷贝
    list5 =copy.deepcopy(list1)
    
    list1[2] = "上海"
    list1[3][0] = "北京"
    
    print(list1)
    print(list2)
    print(list3)
    print(list4)
    

      输出如下

    ['beijing', 'shanghai', '上海', ['北京', 'haiding']]
    ['beijing', 'shanghai', 'shenzhen', ['北京', 'haiding']]
    ['beijing', 'shanghai', 'shenzhen', ['北京', 'haiding']]
    ['beijing', 'shanghai', 'shenzhen', ['北京', 'haiding']]
    ['beijing', 'shanghai', 'shenzhen', ['beijing', 'haiding']]
    

      

    extend()函数:用于将一个列表附加到另一个列表之后

    list1 = ["1","2","3","2"]
    list2 = ["a","b","c"]
    list1.extend(list2)
    print(list1)
    

      输出:

    ['1', '2', '3', '2', 'a', 'b', 'c']
    • Tuple
    元组与列表类似,不同点在于是只读的,不能通过下标进行赋值。同时元组也能利用下标进行截取,可见其实字符串就是特殊的元组。
     
    • Dictionary
    数据字典通过{}创建,与其他语言中的数据字典类似。
    通过键直接取值必须确认肯定有这个键,否则会抛异常,安全的取值方法为使用get(key)函数。
     
      fromkey()函数
      本函数的作用是使用一个列表作为键构建一个有默认值的数据字典。
    list1 = [1,2,3,4]
    #情况1,用于构建数据字典默认值的数据没有嵌套
    list2 = ["1","2","3","4"]
    #情况2,有嵌套
    list3 = [1,["hello"],3]

    dic2 = dict.fromkeys(list1,list2)
    dic2[2] = "hello"
    print(dic2)
    dic3 = dict.fromkeys(list1,list3)
    dic3[2][1] = "bye"
    dic3[2][0] = 6
    print(dic3)

      输出

      {1: ['1', '2', '3', '4'], 2: 'hello', 3: ['1', '2', '3', '4'], 4: ['1', '2', '3', '4']}
      {1: [6, 'bye', 3], 2: [6, 'bye', 3], 3: [6, 'bye', 3], 4: [6, 'bye', 3]}

      可以看到,如果用于构建默认值的数据是一个嵌套的数据类型的话,所有的值指向了同一块引用,修改时会被同时修改

      items()函数

      将数据字典转化为一个列表,列表元素为索引与值构成的列表。

      setdefault()函数

      检查数据字典是否包含某一个键,如果不包含的话向数据字典插入该键值对(不存在则添加,存在则跳过)。

    dic1 = {1:"ab",2:"cd",3:"ef","q":"bye"}
    dic2 = {1:"ab",2:"cd",3:"ef","q":"bye"}
    dic1.setdefault(1,"kk")
    dic2.setdefault(7,"kk")
    print(dic1)
    print(dic2)
    

      输出

    {1: 'ab', 2: 'cd', 3: 'ef', 'q': 'bye'}
    {1: 'ab', 2: 'cd', 3: 'ef', 'q': 'bye', 7: 'kk'}
    

      update()函数

      检查数据字典是否包含某一个键,如果包含则更新,不包含则添加(不存在则添加,存在则更新)。

    dic1 = {1:"ab",2:"cd",3:"ef","q":"bye"}
    dic2 = {3:"hello","f":"come"}
    dic1.update(dic2)
    print(dic1)
    

      输出

    {1: 'ab', 2: 'cd', 3: 'hello', 'q': 'bye', 'f': 'come'}
    

      

     PS:一个强大的字符串转set、list、dict的函数eval

    eval函数可以将一个格式正确的字符串转换为一个对应的数据结构,字符串的格式即为该数据结构用print输出的结果。

    eval本质是将一个字符串转换为一行代码,功能强大但是存在安全性的问题,具体可参见https://www.cnblogs.com/cxchanpin/p/6882451.html

     
     
     
  • 相关阅读:
    对象的实例化内存布局与访问定位
    方法区

    虚拟机栈
    运行时数据区
    类加载子系统
    JVM和Java体系架构
    JUnit概述
    HTML5CSS3_day03
    HTML5CSS3_day01
  • 原文地址:https://www.cnblogs.com/Hexdecimal/p/9293081.html
Copyright © 2011-2022 走看看