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

    一.可变与不可变

    可变:值改变,id没有跟着改变,证明就是在改变原值

    q=['qwe',123,['qw',123]]
    print(id(q))=====>>2668034070664
    q[0]='QWE'
    print(q)========>>>>q=['QWE', 123, ['qw', 123]]
    print(id(q))=====>>2668034070664

    不可变:值改变,id也跟着改变,证明是产生了新的值

    q =10
    print(id(q))=====>>>1368097168
    q=11
    print(id(q))=====>>>1368097200

    二.字符串str

    字符串的定义:msg='hello' # msg=str('hello')

    数据转换:所有类型都可以被str转换成字符串类型
    res=str([1,2,3])
    print(res,type(res))

    [1, 2, 3] <class 'str'>

    内置方法:

    1、按索引取值(正向取+反向取) :只能取

    msg='hello'
    print(msg[0],type(msg[0]))=====>>>h <class 'str'>
    print(msg[-1])=====>>>o
    print(msg[-2])=====>>>l
    View Code

    2、切片(顾头不顾尾,步长)

    msg='hello world'
    res=msg[0:3:1] # 0 1 2
    print(res)====>>>hel
    print(msg)====>>>hello world
    View Code

    3、长度len

    msg='qwerteryerhrt'
    print(len(msg))=====>>>13
    View Code

    4、成员运算in和not in:判断一个小字符串是否存在于大字符串中

    msg='qwerteryerhrt'
    print('qwe' in(msg))=====>>>True
    print('cvb' in(msg) )=====>>>False
    View Code

    5、移除空白strip:用来去除字符串左右两边的字符,不指定去除字符,默认去除空格

    实例一:mag='    qwe    '
    print(mag.strip())=====>>>qwe
    
    实例二:name=input('username:').strip()
    pwd=input('password:').strip()
    if name=='qwe' and pwd=='123':
        print('厉害')
    else:
        print('错了')
    
     username:       qwe
    password:  123
    厉害
    View Code

    6、切分split:针对有规律的字符串,按照某种分隔符列成列表

    实例一:info='egon:18:male'
    res=info.split(':')
    print(res,type(res))
    print(res[0],res[1])
    
    ['egon', '18', 'male'] <class 'list'>
    egon 18
    实例二:qwe='qwe.qd.qwd|faf'
    print(qwe.split('.'))
    
    ['qwe', 'qd', 'qwd|faf']
    
        join的使用
        q=['qwe','123','qwwe']
        qwe=':'.join(q)
        print(qwe)
    
        qwe:123:qwwe
    View Code

    7、循环

    
    
    for item in 'hello':
        print(item)
    
    h
    e
    l
    l
    o
    View Code
    
    

    需要掌握

    1、strip去两边,lstrip去左边,rstrip去右边

    print('*************eron*******'.strip('*'))去两边
    print('******egon*******'.lstrip('*'))去左边
    print('******egon*******'.rstrip('*'))去右边
    
    eron
    egon*******
    ******egon
    View Code

    2、lower字母小写,upper字母大写

    print('Abc123'.lower())字母小写
    print('Abc123'.upper())字母大写
    
    abc123
    ABC123
    View Code

    3、startswith以什么开头,endswith以什么结尾

    msg='qwe is asd'
    print(msg.startswith('q'))判断是否以什么开头
    print(msg.endswith('d'))判断以什么结尾
    
    True
    True
    View Code

    4、format的三种玩法

    res='my name is {name} ma age is {age}'.format(name='egon', age=18)
    print(res)
    res='my name is {} ma age is {}'.format(18,'egon')
    print(res)
    res='my name is {1} ma age is {0}'.format(18,'egon')
    print(res)
    
    my name is egon ma age is 18
    my name is 18 ma age is egon
    my name is egon ma age is 18
    View Code

    5、split切分,rsplit右切分

    msg = 'qwe: is: asd'
    print(msg.split(':',1))切分
    print(msg. rsplit(':',1))右切分
    
    ['qwe', ' is: asd']
    ['qwe: is', ' asd']
    View Code

    6、replace替换

    msg = 'qwe id qwe acsv'
    print(msg.replace('qwe','asd'))
    print(msg.replace('qwe','asd',1))
    
    asd id asd acsv
    asd id qwe acsv
    View Code

    7、isdigit判断是否为纯数字字符串

    print('123344'.isdigit())
    print('123qqwe123'.isdigit())
    
    True
    False
    View Code
    了解
    1、find,rfind,index,rindex,count
    find查找不到会返回一个-1
    indxe查找不带会报错
    count计数
    2、center,ljust,rjust,zfill
    填充 .center(50,*)
    print('egon').center居中填充
    4、captalize首字母大写
    swapcase大小写转换
    title每个单词字母
    5、is数字系列
    num1=b'4' #bytes
    num2='4' #unicode,python3中无需加u就是unicode
    num3='四' #中文数字
    num4='Ⅳ' #罗马数字

    bytes与阿拉伯数字组成的字符串
    print(num1.isdigit())
    print(num2.isdigit())
    print(num3.isdigit())
    print(num4.isdigit())

    阿拉伯数字组成的字符串
    print(num2.isdecimal())
    print(num3.isdecimal())
    print(num4.isdecimal())

    阿拉伯数字中文罗马组成的字符串
    print(num2.isnumeric())
    print(num3.isnumeric())
    print(num4.isnumeric())

    总结:
    存一个值
    有序
    不可变

    列表list:

    作用:多个装备,多个爱好,多门课程,多个女朋友等

    定义:[]内可以有多个任意类型的值,逗号分隔
    my_girl_friends=['alex','wupeiqi','yuanhao',4,5] #本质my_girl_friends=list([...])

    数据类型转换:但凡能被for循环遍历的数据类型都可以传给list
    res=list('hello')=====>>>['h', 'e', 'l', 'l', 'o']
    res=list({'a':1,'b':2,'c':3}) =====>>>['a', 'b', 'c']
    print(res)

    优先掌握的操作:

    1、按索引存取值(正向存取+反向存取):即可存也可以取

    l=['a','b','c','d','e']
    print(l[0])=====>>>>a
    print(l[-1])=====>>>e
    print(id(l))=====>>>1498890049672
    l[0]='A'
    print(l)====>>>['A', 'b', 'c', 'd', 'e']
    print(id(l))=====>>>1498890049672
    强调强调强调!!!:对于不存在的索引会报错
    l[5]='AAAA'=====>>>报错
    
    dic={"k1":111}
    dic['k2']=2222
    print(dic)====>>>{'k1': 111, 'k2': 2222}
    View Code

    2、切片(顾头不顾尾,步长)

    l=['a','b','c','d','e']
    print(l[1:4])====>>>['b', 'c', 'd']
    print(l[::-1])=====>>>['e', 'd', 'c', 'b', 'a']
    View Code

    3、长度

    l=['a','b','c','d','e']
    print(len(l))=====>>>5
    View Code

    4、成员运算in和not in

    l=['a','b','c','d','e']
    print('a' in l)====>>>Ture
    View Code

    5、追加

    .append()在最后加值
    l=['a','b','c','d','e']
    l.append('xxx')
    l.append('yyy')
    print(l)====>>>['a', 'b', 'c', 'd', 'e', 'xxx', 'yyy']
    .insert()在指定索引前面加值
    l=['a','b','c','d','e']
    l.insert(3,'xxxx')
    l.insert(0,'yyy')
    print(l)====>>>['yyy', 'a', 'b', 'c', 'xxxx', 'd', 'e']
    .extend
    l=['aaa','bb',345]
    l.extend(('1','2','3'))
    print(l)=====>>>['aaa', 'bb', 345, '1', '2', '3']
    View Code

    6、删除

    l=['a','b','c','d','e']
    
    del是一种通用的删除操作,没有返回值
    del l[0]
    print(l)====>>>['b', 'c', 'd', 'e']
    
    dic={'k1':1}
    del dic['k1']
    print(dic)====>>>{}
    clear是全部清除
    l=['aaa','bb',345]
    l.clear()
    print(l)=====>>>[]
    
    l.remove(指定要删除的那个元素),没有返回值
    res=l.remove('b')
    print(l)====>>>['a','c', 'd', 'e']
    print(res)====>>>None
    
    l.pop(指定要删除的那个元素的索引),返回刚刚删掉的那个元素
    l=['a','b','c','d','e']
    l.pop(-1)
    res=l.pop(1)
    print(l)====>>>['a', 'c', 'd']
    print(res)====>>>b
    View Code

    7、循环

    l=['a','b','c','d','e']
    for item in l:
        print(item)
    View Code

    .reverse()反转
    l=['aaa','bb',345]
    l.reverse()
    print(l)=====>>>[345, 'bb', 'aaa']

    .sort()只有在类中中所有元素都是同种类型的情况下才能用sort排序
    l=['z','d','a']
    l.sort()
    print(l)====>>>>['a', 'd', 'z']

    总结:存多个值,有序,可变

    元组

    一、定义
    t1 = ()
    print(t1, type(t1))

    参数为for可以循环的对象(可迭代对象)

    如何定义一个只有一个值的元组
    "Owen"
    print(("Owen", ))
    print(tuple(['Owen']))

    总结:
    t = (1, 2, 3)
    t = (1, )

     常用操作:

    索引取值

    t = (1, 2, 3, 2, 3, 2)
    print(t[1])
    print(t[-2])
    View Code

    切片

    t = (1, 2, 3, 2, 3, 2)
    print(id(t))
    nt = t[:-1:]
    print(nt, id(nt))
    View Code

    长度len

    t = (1, 2, 3, 2, 3, 2)
    print(len(t))
    View Code
    元组内置方法
    print(t.count(2)) # 该数据集合可以存放相同数据
    print(t.index(2, 2, 3))
    案例
     提前拥有一个老师列表,打算开除,如果是校长亲友团,免开
     原始列表为list类型
     手动输入是否是亲友团,决定是否能开除()
    
    teas = ['Bob', 'Alex']
    
    friends = input("亲友团[0, 1]:")
    
    if friends == '1':
        teas = tuple(teas)
    
    => 异常处理
     判断teas对象是否是tuple类型
    if not isinstance(teas, tuple):  # 老师是否是亲友团,不是就开除
        teas.clear()
    
    for t in teas:
        print("在职老师:%s" % t)
    View Code
    案例二
    元组中的数据一定不能改变,但是元组中的数据(可变类型)的数据可以改变
    t1 = (1, 2, "abc", True, (1, 2))  # t1永远无法改变
    
    t2 = (1, 2, [])
    print(t2, type(t2), id(t2), id(t2[2]))
    t2[2].extend((10, 20))
    print(t2, type(t2), id(t2), id(t2[2]))
    View Code

    总结;有序,存多个值,不可变

    字典:

    特别了解:dict是python中仅存的mapping类型

    一、声明
    *****
    dict的key:可以为所以不可变类型:int float tuple str bool None, 一般就采用字符串
    dict的value:可以为所以数据类型
    注:key具有唯一性(重复会覆盖旧值),value可以重复
    dic = {1: None, None: None, 3.14: None,
    True: None, 'abc': None, (1,): None,
    None: 12345
    }

    # 字典无序存储数据,无索引与切片,用key来取值
    # 二、增删改查
    dic = {}
    # 增:key不存在
    dic['name'] = 'Mac'
    print(dic)
    # 改:key已存在
    dic['name'] = 'Big Mac'
    print(dic)
    # 查:
    print(dic['name'])
    # 删:
    del dic['name']
    print(dic)

    三、get取值 *****

    dic = {'a': 10, 'b': 20}
    print(dic['c'])  # KeyError
    res = dic.get('c')  # 拥有默认值,None,可以避免错误
    print(res)
    res = dic.get('d', 'key不存在')  # 可以自定义默认值
    print(res)
    View Code

    # 增
    # 添加的参数字典,与dic可以重复,就是更新值,新key就是新增
    dic.update({'a': 100, 'c': 300})
    print(dic)

    # 删 **
    res = dic.pop('c') # 根据key删除指定对象,并返回删除的对象的value
    print(res)

    # 随机删除,返回值是(key, value)
    print(dic)
    print(dic.popitem())
    print(dic.popitem())
    print(dic)

    # 如何定义一个空字典
    # 第一个参数:keys:list|tuple|str,第二个参数:统一的默认value
    d10 = {}.fromkeys(['a', 'b', 'c'], '')
    print(d10) # {'a': '', 'b': '', 'c': ''}

    案例

    添加老师
    如果有teas,在原teas基础上添加老师,如果没有,新建一个空teas
    if 'teas' not in d11:  # 成员运算
        d11['teas'] = []
    d11['teas'].append('Egon')
    d11['teas'].append('LiuXX')
    print(d11)
    View Code

    # 原d11中,如果有teas这个key,setdefault相当于什么都没干
    # 如果没有,就将第二个参数(默认值)传给teas存放到d11中
    d11.setdefault('teas', [])
    d11['teas'].append('Egon')
    d11['teas'].append('LiuXX')
    print(d11)

    # 字典的定义:{} | dict()
    # 字典的常用操作:增删改查
    # 字典的内置方法:
    # 字典的循环(迭代)

    dic = {'a': 10, 'b': 20, 'c': 30}
    # 直接for循环(遍历)字典得到的是key
    for k in dic:
    print(k, dic[k])

    # 能不能只循环值
    values = dic.values()
    print(values, type(values))
    # 存放key的集合
    keys = dic.keys()
    print(keys, type(keys))
    # 存放key-value的键值对关系
    k_vs = dic.items()
    print(k_vs, type(k_vs))

    # dic.values() | dic.keys() | dic.items() 不是原生list,不能直接索引取值,但可以for循环取值
    # vs = list(values)
    # print(vs[1])
    # for v in vs:
    # print(v)

    for v in values:
    print(v)
    print()
    for k in keys: # 跟直接遍历字典是一样的
    print(k)

    print()
    # ***** 同时遍历k-v
    for k, v in dic.items():
    print(k, v)

    案例

    # 案例: 不区分大小写,计算每一个名字出现的次数,记录在字典中
    ls = ['Owen', 'owen', 'Egon', 'LiuXX', 'Liuxx', 'egon', 'egon']
    # {'owen': 2, 'egon': 3 ...}
    name_dic = {}
    for name in ls:
        # 名字全小写,不用区分大小写
        name = name.lower()
        # 名字是否在字典中存在:存在 - 次数+1 | 不存在 - 添加并设置初值1
        if name not in name_dic:
            # 不存在
            name_dic[name] = 1
        else:
            # 存在
            name_dic[name] += 1
    print(name_dic)
    View Code

    案例

    ls = ['Owen', 'owen', 'Egon', 'LiuXX', 'Liuxx', 'egon', 'egon']
    name_dic = {}
    for name in ls:
        name = name.lower()
        # name已存在,不管,不存在,初始化指定key:name值为1
        name_dic.setdefault(name, 0)
        name_dic[name] += 1
    print(name_dic)

    集合:

    1、定义与声明
    什么是set:
    i) 单列数据集合:str,list,tuple,set 双列:dict
    ii) 无序存储:无key无index,无法取值
    iii) 可变数据类型,内部可以存放任意类型数据,但数据具有唯一性 *****
    {}代表空字典,用set()来创建空集合

    2、内置方法与使用 - 集合间的运算 (& | ^ - > < ==)

    交集 &

    res = p_set & l_set
    print(res)
    res = p_set.intersection(l_set)
    print(res)  # {'egon'}

    并集   |

    res = p_set | l_set
    print(res)
    res = p_set.union(l_set)
    print(res)  # {'z', 'c', 'y', 'x', 'b', 'a', 'egon'}

    差集  -

    res = p_set - l_set
    print(res)  # {'a', 'b', 'c'}
    res = l_set.difference(p_set)
    print(res)  # {'x', 'z', 'y'}

    对称差集^

    res = p_set ^ l_set
    print(res)
    res = p_set.symmetric_difference(l_set)
    print(res)  # {'y', 'a', 'b', 'x', 'z', 'c'}

    print(p_set)
    print(l_set)
    p_set.difference_update(l_set) # 将运算结果赋值给调用者
    p_set = p_set - l_set
    print(p_set) # {'c', 'a', 'b'}
    print(l_set) # {'egon', 'z', 'y', 'x'}

    # 添加删除操作
    s = set()
    s.add('abc')
    s.add('xyz')
    print(s)
    res = s.pop() # 随机删除一个ele元素
    print(res)
    if 'xyz' in s:
    s.remove('xyz') # 有ele删除,无ele抛异常
    案例

    # 3、案例与应用场景
    # 选课:
    class_map = [
        ('owen', 'python'),
        ('egon', 'linux'),
        ('egon', 'python'),
        ('liuxx', 'python'),
        ('liuxx', 'java')
    ]
    # 需求:
    # 1.多少人参加了选课: ['owen', 'egon', 'liuxx']
    # 2.都选了哪些课程: ['python', 'linux', 'java']
    # 利用逻辑代码去重
    names = []
    for name, _ in class_map:
        # 判断列表中是否已存在,不存在才添加
        if name not in names:
            names.append(name)
    print(names)

    # 利用set去重
    classes = set()
    for _, cless in class_map:
    classes.add(cless)
    classes = list(classes)
    print(classes)



  • 相关阅读:
    各大互联网公司架构演进之路汇总
    Java工程师成神之路~(2018修订版)
    Java的并发编程中的多线程问题到底是怎么回事儿?
    深入理解多线程(五)—— Java虚拟机的锁优化技术
    Java中线程池,你真的会用吗?
    深入理解多线程(四)—— Moniter的实现原理
    深入理解多线程(三)—— Java的对象头
    深入理解多线程(二)—— Java的对象模型
    深入理解多线程(一)——Synchronized的实现原理
    css
  • 原文地址:https://www.cnblogs.com/wangtenghui/p/10580733.html
Copyright © 2011-2022 走看看