• 第三章 数据类型


    3.1 int

    # None 无操作
    # bytes 类
    
    # 只有str 可以强转
    s = '99'
    print(type(int(s)))
    

    3.2 bool

    # bool 布尔,主要用于条件判断。 
    # None, 0 , '', [], {}, set() 
    # 以上都是False
    

    3.3 str " "

    1. 常用操作

    str操作常用的 14 (9+5) 种
    1.upper/lower 2.isdigit/isdecimal 3.strip 4.replace 5.split 6.startswith/endswith 7.encode 8.format 9.join
    

    1. s.upper() / s.lower()

    # 大小写转换
    s = 'Henry'
    print(s.upper(), s.lower())
    

    2. s.isdigit() / s.isdecimal()

    # 判断是否是数字
    s1 = '123'
    s2 = '12.3'
    print(s1.isdigit(), s2.isdigit())		# True Flase
    
    # isdecimal只判断是否是整数
    

    3. s.strip()

    # 默认去除两边空格+ 
     + 	
    
    s = '  asdfgh,      '
    print('-->', s.strip(), '<--')
    print('-->', s.strip().strip(','), '<--')
    

    4. s.replace('a', 'b', n)

    # repalce 中的 a 和 b 必须是str类型, n 必须是int类型
    s = 'adsafga'
    print(s.replace('a', '666'))
    print(s.replace('a', '666', 1))
    

    5. s.split('_')

    # str的分割
    s = 'henry_echo_elaine_'
    li = s.split('_')
    print(li)  # 分割后的元素永远比分隔符号多一个
    

    6. s.startswith() / s.endswith()

    # 判断开始/结束位置是否是指定元素
    s = 'abghjkdc'
    print(s.startswith('ab'), s.endswith('cd'))
    # True  Flase
    

    7. str 的格式化输出(2种)

    # 如果使用格式化输入,打印%需要使用 %%
    # %s,%d  :表示占位符
    
    # way1 通常用于函数
    "***{0}***{1}**".format(a, b)
    # % (a, )  :这里表示tuple,建议加逗号 
    
    # way2 
    "***%s, ***%s***" % (a, b,)   
    
    # 示例
    # way1 '{0} ***{1}'.format(a, b)
    a = 'abcd'
    b = '666'
    s = '{0} ***{1}'.format(a, b)
    print(s)
    # way2 
    s1 = '%s***%s' % (a, b,)
    print(s1)
    

    扩展使用示例:

    # %s ,只能是tuple
    msg = '我是%s, 年龄%s' % ('alex', 19)
    msg = '我是%(name)s, 年龄%(age)s' % {'name': 'alex', 'age': 19}
    # format格式化
    v1 = '我是{name}, 年龄{age}'.format(name = 'alex', age = 18)
    v1 = '我是{name}, 年龄{age}'.format(** {'name': 'alex', 'age': 19})
    v2 = '我是{0}, 年龄{1}'.format('alex', 18) 
    v2 = '我是{0}, 年龄{1}'.format(*('alex', 18) )
    

    8. encode

    # 指定编码类型
    s = '你好'
    print(s.encode('utf-8'))   # 6个字节
    print( s.encode('gbk'))		 # 4个字节
    

    9. '_'.join(s)

    # 用于循环加入指定字符
    # s 必须是iterable
    # s 可是str,list,tuple,dict,set(str + 容器类)
    # s 中元素值必须是str类型
    '_'.join(s)
    
    # 示例
    # 指定元素循环连接str中的元素
    s = 'henry'
    print('_'.join(s))    # 下划线连接个字符
    

    2. 其他操作

    1. s.find('a') / s.rfind()
      • 返回第一个 a 的索引值,没有则返回 -1
    2. s.index('a') / s.rindex() /s.lindex()
      • 返回第一个 a 的索引值,没有报错
    3. s.isupper() / s.islower()
    4. s.capitalize()
    5. s.casefold()
    6. s.center(20, "*")
      • 可以为空
    7. s.ljust(20, "*")/s.rjust()
    8. s.zfill()
      • 用0填充
    9. s.count('a', [start], [end])
      • 查找'a' 的个数
    10. s.isalnum()
    11. s.isalpha()
    12. s.isnumeric()
    13. s.isprintable()
    14. s.istitle()
    15. s.partition('a') / s.rpartition()
      • 分成三部分,a左边,a右边
    16. s.swapcase()


    3. 公共方法

    1. len(s)

    # 返回s长度
    s = '1234567890'
    print(len(s))     # 10
    

    2. s[index]

    # 索引取值
    s = '123456789'
    print(s[3])   # 4
    

    3. 切片

    s = '123456789'
    print(s[3:5])   # 45
    

    4. setp

    # 根据step进行切片
    s = '123456789'
    print(s[3::2])   # 468
    

    5. for循环

    s = '123456789'
    for i in s:
        print(i)
    

    3.4 list []

    1. 常用操作

    list操作目前一共有15(8+7)种, 1.append 2.insert 3.remove 4.pop 5.clear 6.reverse 7.sort 8.extend
    

    1. li.append('666')

    # 任意类型数据,li操作不能直接放在print()中
    li = [1, 2, 3, 4, 5, 6]
    li.append('666')
    print(li)
    li.append(['henry'])
    print(li)
    

    2. li.insert(2, 'henry')

    # 按照index位置插入指定内容
    li = [1, 2, 3, 4, 5, 6]
    li.insert(3, 'henry')
    print(li)
    

    3. li.remove('aa')

    # 删除指定list中的元素
    li = ['aa', 'a', 'aacde']
    li.remove('aa')
    print(li)
    li.remove('bb')
    print(li)  # 会报错
    

    4. li.pop(index)

    # 按index删除list中的元素
    li = [1, 2, 3, 4, 5, 6]
    li.pop()
    print(li)
    li.pop(3)
    print(li)
    

    5. li.clear()

    # 清空list中的所有元素
    li = [1, 2, 3, 4, 5, 6]
    li.clear()
    print(li)
    

    6. li.reverse()

    # 反转list中的元素
    li = [1, 2, 3, 4, 5, 6]
    li.reverse()
    print(li)
    

    7. li.sort(reveres = True)

    # reverse = True 从大到小
    # 只能是同一类型的元素
    # dict,tuple不支持排序
    li = [6, 2, 3, 1, 5, 4]
    li.sort()
    print(li)
    li = ['ba', 'ab', 'c', 'd']
    li.sort(reverse=True)
    print(li)
    
    li = [[6], [2, 3], [1, 5, 4]]
    li.sort()
    print(li)
    
    li = [(6, 2, 3, 1, 5, 4)]
    li.sort()
    print(li)
    

    8. li.extend(s)

    # 把s中的元素,循环取出,逐个追加到list中
    # s可以是str, list, tuple, dict, set
    # dict只取keys 追加到list中
    s = 'henry'
    li = [1, 2, 3, 4, 5, 6]
    li.extend(s)
    print(li)
    s = ['a', 'b', 'c', 'd']
    li.extend(s)
    print(li)
    

    2. 其他

    1. li.count('a')
    2. li.copy()
      • 浅拷贝
    3. li.count()
      • 只计算第一层,不考虑嵌套
    4. li.index('val')


    3. 公共方法

    1. len(s)

    li = [1, 2, 3, 4, 5, 6]
    print(len(li))
    
    

    2. index 取值

    li = [1, 2, 3, 4, 5, 6]
    print(li[2])
    
    

    3. 切片

    li = [1, 2, 3, 4, 5, 6]
    print(li[2:5])
    
    

    4. step

    li = [1, 2, 3, 4, 5, 6]
    print(li[2::2])
    
    

    5. for循环

    li = [1, 2, 3, 4, 5, 6]
    for i in li:
      print(i)
    
    

    6. 修改

    # 使用index修改,如果只是一个值,则正常修改
    li = [1, 2, 3, 4, 5, 6]
    li[2] = 'henry'
    print(li)
    # 使用index修改,如果是多个值,认为是一个tuple
    li[2] = 'a', 'b', 'c'
    print(li)
    # 使用切片[]修改,则循环取值加入
    li[2:3] = 'a', 'b', 'c'
    print(li)
    

    7. 删除del li[]

    # del 也不能放在print()里面
    li = [1, 2, 3, 4, 5, 6]
    del li[2]
    print(li)
    del li[2:]
    print(li
    

    3.5 tuple ()

    # 没有独有操作,目前只有5种
    # tuple里,最后一个值最好加一个 逗号 ,以区别于运算符
    

    1. 常用操作

    1. len()

    t = (1, 2, 3,)
    print(len(t))
    

    2. index

    t = (1, 2, 3,)
    print(t[2])
    

    3. 切片

    t = (1, 2, 3,)
    print(t[1:])
    

    4. step

    t = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
    print(t[1::2])
    

    5. for 循环

    t = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
    for i int t:
      print(i)
    

    2. 内置函数

    • max(tup). # 返回最大值
    • min(tup). # 返回最小值
    • tuple(li). # list 转tuple

    3.6 dict {}

    1. 常用操作

    dict 目前一共有 14(9 + 5) 种操作, 1.keys 2.values 3.items 4.get 5.pop 6.update 7.setdefault 8.popitem 9.clear
    # {key1: value1, k2:value2}
    # key不能重复
    

    1. info/ info.keys()

    • 类似 list ,但不是list,例如:dict_keys(['name', 'age', 'gender'])
    # 取所有key
    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    for key i info:
      print(key)
    

    2. Info.values()

    # 取所有value
    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    for v in info.values():
        print(v)
    

    3. info.items()

    # 取所有key值对
    # 取出的是 tuple 类型
    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    for pair in info.items():
        print(pair)
    

    4. Info.get(key, 666)

    # 有key则取出, 没有则返回指定 值
    # 如果没有指定值,则返回 None
    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    print(info.get(1, 666))
    print(info.get(4, 666))
    

    5. info.pop(key)

    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    print(info.pop(1))
    print(info.pop(4))
    

    6. info.update(info1)

    # 只能用dict类型更新
    info = {}
    info1 = {1: 'henry', 2: 'echo', 3: 'eliane'}
    info.update(info1)
    print(info)
    

    7. info.setdefalut(key, value)

    # 查询key,有则取出,没有则添加
    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    info.setdefault(4, 'hello')
    print(info)
    # 取出需要赋值给其他变量
    val = info.setdefault(4, 'i hate you')
    print(val)
    

    8. info.popitem()

    # 不能加参数,删除最后一个key值对
    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    v = info.popitem()
    print(v,info)   # v是tuple
    

    9. info.clear()

    # 清空所有元素
    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    info.clear()
    print(info)
    

    2. 其他

    1. info.copy() # 浅拷贝
    2. info.fromkeys()
    li = [1, 2, 3, 4, 5]
    info = {'a': 1, 'b': 2}
    v = info.fromkeys(li, 'hello')
    print(v, info)
    


    3. 公共方法

    1. len(info)

    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    print(len(info))
    

    2. Index 取值

    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    print(info[1])
    

    3. for 循环

    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    for i in info:
      print(i)
    for v in info.values():
      print(v)
    for pair in info.items():
      print(pair)
    

    4. 修改

    # key一样则修改,不一样则追加
    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    info[1] = 'hello'
    print(info)
    info[4] = 'you are smart'
    print(info)
    

    5. 删除

    info = {1: 'henry', 2: 'echo', 3: 'eliane'}
    del info[1]
    print(info)
    

    4. 有序字典

    # __getitem__ set, del 
    from collections import OrderdDict
    
    info = OrderedDict()
    info['k1'] = 123
    info['k2'] = 456
    

    3.7 set() /{}

    1. 常用操作

    set 目前一共有11(10 + 2)种操作,空集合用set()表示。 
    1.add 2.update 3.pop 4.discard 5.remove 6. clear 7.intersection 8.union 9.difference 10.symmetric_difference
    # 无序,不重复
    

    1. s.add('a')

    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    s.add(5)
    print(s)
    

    2. s.update(s1)

    # 可以用str, list, tuple, dict, set, 也可以混合多种类型放入update中
    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    s1 = {5, 6, 7, 8, 1, 2, 3}
    s2 = [5, 6, 7, 8, 1, 2, 3]
    s3 = (5, 6, 7, 8, 1, 2, 3)
    s4 = {5: 6, 7: 8, 1: 2}
    s.update(s1)
    print(s)
    
    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    s.update(s2)
    print(s)
    
    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    s.update(s3)
    print(s)
    
    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    s.update(s4)
    print(s)
    

    3. s.pop()

    # 随机删除,此时pop中不能有任何参数
    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    s.pop()  # 默认删除第一个元素/随机
    print(s)
    

    4. s.discard()

    # 必须有一个参数,没有不报错, 不会返回值
    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    val = s.discard(3)
    print(s)
    print(val)
    

    5. s.remove('a')

    # 必须有一个参数,没有会报错
    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    s.remove(3)
    print(s)
    

    6. s.clear()

    s = {1, 'henry', 2, 'echo', 3, 'eliane'}
    s.clear()
    print(s)
    

    7. s.intersection(s1)

    # 取v1 和v2 的交集
    v1 = {1, 'henry', 2, 'echo', 3, 'eliane'}
    v2 = {1, 3, 5, 7}
    v = v1.intersection(v2)
    print(v)
    

    8. v.union(v1)

    # 取并集
    v1 = {1, 'henry', 2, 'echo', 3, 'eliane'}
    v2 = {1, 3, 5, 7}
    v = v1.union(v2)
    print(v)
    

    9. v.difference(v1)

    v1 = {1, 'henry', 2, 'echo', 3, 'eliane'}
    v2 = {1, 3, 5, 7}
    v = v1.difference(v2)
    print(v)
    

    10. v.symmetric_difference(v1)

    v1 = {1, 'henry', 2, 'echo', 3, 'eliane'}
    v2 = {1, 3, 5, 7}
    v = v1.symmetric_difference(v2)
    print(v)
    
    # 集合的运算
    	方法
        运算法
    

    2. 其他

    1. v.copy()
    2. v.difference_update(v2)
    3. v.symmetric_difference_update(v2)
    4. v.intersection.update(v2)
    5. v.isdisjoint(v2) # 返回 bool值
    6. v.issubset(v2)/ v.issuperset(v2)


    3. 公共方法

    1. len(v)

    v = {1, 'henry', 2, 'echo', 3, 'eliane'}
    print(len(v))
    

    2. for 循环

    # 无序输出
    v = {1, 'henry', 2, 'echo', 3, 'eliane'}
    for i in v:
        print(i)
    

    3.8 公共方法

    int bool str list tuple dict set
    len
    index
    切片
    step
    for循环/ iterable
    修改
    删除

    3.9 内存相关&深浅拷贝

    0. 可嵌套的数据类型

    • 所有的容器类例如:list,tuple, dict,set 都可以嵌套,但set(), 只能嵌套可hash(int, bool, str, tuple 4种)的数据类型。

    1. 内存相关

    小数据池

    • ==判断值
    • is判断内存地址
    • python中默认会对int,str,bool进行缓存

    缓存规则:

    • int型-5 — 256之间会被缓存
    • str:空和单个字符默认缓存;只包含字母、数字、下划线,也缓存; 乘数>1时,str只包含Num、ALp、_时缓存(最终长度不能超过20)
    • str:手动指定缓存
    • bool

    2. 深浅拷贝

    1. 使用格式import copy(模块)
    2. 4 个结论
      • 浅拷贝只是拷贝第一层可变类型
      • 深拷贝拷贝所有可变类型的数据
      • 只要 copy ,一定会为数据开辟新的内存空间
      • tuple 浅copy地址一样, 有嵌套的可变类型,deepcopy也会拷贝tuple数据

  • 相关阅读:
    mysql的锁
    设计模式相关
    分布式缓存
    myBatis相关
    mevan相关
    Java 一些缩写的解释
    Spring相关
    Java中PreparedStatement和Statement的用法区别
    Java线程池
    spring中的事务传播机制
  • 原文地址:https://www.cnblogs.com/henryw/p/11681365.html
Copyright © 2020-2023  润新知