系列文章目录

一、深浅拷贝

  • 浅拷贝:速度快,内存占用少

    对于可变类型:只复制第一层

    对于不可变对象:只是复制它们的引用

    import copy  # 导入模块。想要用拷贝功能?先拿过来! 
    listB = copy.copy(listA)  # 将a的值浅拷贝一份给b
    

  • 深拷贝:数据独立性好

    对于可变类型:复制数据的每一层,其中包含的不可变类型数据,还是只会复制引用

    对于不可变对象:无论深浅拷贝,都是复制引用!

    import copy  # 也是放在copy模块中
    listB = copy.deepcopy(listA)  # 将a的值深拷贝一份给b
    

二、数字类型的转换

  • int类型

    • 定义:

      a = 10 
      
    • 类型转换:

      int(值) 会将传进去的值转换为int类型,并返回转换后的值。

      a = int('10')  # 将str类型的10转换为int类型,并将返回值保存到b中
      

      float类型转换为int类型,会丢失精度!

      a = int(3.14)  # 3.14是float类型,转换为int类型时丢失精度,变为3
      print(a)  # 打印出的值为3
      
  • float类型

    • 定义:

      a = 3.14  # 有了小数点和小数部分,解释器就会自动判定为folat类型
      
    • 类型转换:

      float() 与 int() 类似,返回值为 float类型

      float('3.14')  # 字符串类型的3.14转换为folat类型的3.14
      float(3)  # 返回值为 3.0
      

三、字符串常用操作

  • 定义:

    a = 'hello'  # 注意要有引号,单双皆可
    
  • 获取指定字符:

    字符串是一种有序的数据类型,因此可以通过下标(索引)来获取指定位置的字符

    注意:在绝大多数编程语言中,下标是从0开始的,python也是如此!

    a = 'hello,world'
    print(a[0])  # 打印字符:h,方括号内的就是下标
    print(a[6])  # 打印字符:w
    

    还可以使用负数下标,表示从右往左取值,此时,是从-1开始计数。

    a = 'hello,world'
    print(a[-1])  # 打印:d
    print(a[-3])  # 打印:r
    
  • 切片:

    通过索引,还可以将指定字符拷贝出来(在新的内存空间中创建字符串),形成一个新的子字符串。
    拷贝的原因:str类型是不可变类型,即不可修改的,只能重新在内存中创建。

    a = 'hello,world'
    # 将hello取出,形成新的子字符串
    b = a[0:5]  # h的下标是0,而o的下标是4(需要往后移一位),所以是 0:5
    print(b)  # 打印:hello
    

    使用步长:

    a = 'xyxyxy'
    # 将所有的y取出
    b = a[1:6:2]  # 第一个y下标是1;最后一个字符下标是5,后移一位,所以为6;2表示每次在前一个下标的基础上加2,再读出字符
    print(b)  # 打印:yyy
    

    反向步长:

    a = '0123,456'
    b = a[3:0:-1]  # 负数下标表示在前一个下标的基础上减去步长数
    print(b)  # 打印:321,因为是从第三个字符开始往左取值
    

    如果开始或结束下标被省略,表示从第一个字符开始或最后一个字符结束。

    a = 'hello,world'
    b = a[0::]  # 结束下标被省略,表示取到最后一个字符d(包括d)结束
    print(b)  # 打印 hello,world
    
    # 将整个字符串倒过来
    c = a[::-1]
    print(c)  # 打印:dlrow,olleh
    
  • 成员判断:

    a = 'hello,world'
    print('world' in a)  # 使用了成员运算符in,打印 True
    
  • 移除指定字符-strip():

    strip()默认移除空白字符,这里的空白字符指空格、tab等看不见的特殊字符。

    • 移除两端的指定字符

      a = ' hello '
      b = a.strip()  # 返回新的字符串(因为str是不可变类型,所以会另外申请内存)
      print(b)  # 打印hello,两端的空白字符被移除
      
      c = '---你---好---'
      print(c.strip('-'))  # 指定移除的字符为‘-’,打印:你---好,不会移除中间的‘-’。
      
    • 移除左边的指定字符:lstrip()

    • 移除右边的指定字符:rstrip()

  • 字符串分割-split():

    a = 'hugh:18:male'
    b = a.split(':')  # 指定分隔符,会根据分隔符将字符串分割,返回一个列表
    print(b)  # 打印:['hugh', '18', 'male']
    
  • 字符串大小写转换:

    • 字符串转换为小写-lower()

      a = 'HELLO'
      print(a.lower())  # 打印:hello
      
    • 字符串转换为大写-upper()

  • 判断是否以指定字符开头或结尾

    • 判断开头-startswith()

      print('hello'.startswith('h'))  # 打印:True
      
    • 判断结尾-endswith()

  • 拼接字符串-join():

    a = ['hello', 'hugh', '17']  # 容器内不能包含非字符串,否则会报错
    print(':'.join(a))  # 指定用 : 进行拼接,打印:hello:hugh:17
    

    也可以手动拼接:

    a = 'hello' + ':' + 'hugh' + ':' + '17'
    print(a)
    
  • 替换-replace()

    a = 'hello, 世界!'
    b = a.replace('世界', 'world')  # 前面的是要被替换的字符,后面的是替换字符
    print(b)  # 打印:hello, world!
    
  • 判断字符串是否是纯数字-isdigit()

    print('123'.isdigit())  # 打印:True
    print('12.3'.isdigit())  # 打印:False,因为小数点不是数字
    
  • 循环遍历:

    a = 'hello'
    for i in a:
        print(i)  # 会将hello中的字符一行一个的打印出来
    
  • 否是纯数字-isdigit()

    print('123'.isdigit())  # 打印:True
    print('12.3'.isdigit())  # 打印:False,因为小数点不是数字
    

    其他类型的判断还有:

    • islower():是否全为小写
    • isupper():是否全为大写
    • istitle():每个单词的首字母是否为大写
    • isalnum():是否仅包含大小写字母和数字
    • isalpha():是否仅包含大小写字母
  • 循环遍历:

    a = 'hello'
    for i in a:
        print(i)  # 会将hello中的字符一行一个的打印出来
    

下一篇