zoukankan      html  css  js  c++  java
  • 元组类型、字典类型以及内置方法

    #元组类型
    #一:基本使用 #
    1 用途:元组是不可变的列表,能存多个值,但多个值只有取的需求,而没有改的需求,那么用元组最合理 # # 2 定义方式:在()内用逗号分割开,可以存放任意类型的值 # names=('alex','egon','wxx') #names=tuple(('alex','egon','wxx')) # print(type(names)) # 强调: 当元组内只有一个元素时,务必记住加一个逗号 # x=('egon',) # print(type(x)) # 3 常用操作+内置的方法 #1、按索引取值(正向取+反向取):只能取 # names=('alex','egon','wxx') # names[0]='sb' #2、切片(顾头不顾尾,步长) # names=('alex','egon','wxx','lxx','cxxx') # print(names[1:3] # ) #3、长度 # names=('alex','egon','wxx','lxx','cxxx') # print(len(names)) #4、成员运算in和not in # names=('alex','egon','wxx','lxx','cxxx') # print('alex' in names) #5、循环 # names=('alex','egon','wxx','lxx','cxxx') # for item in names: # print(item) # #二:该类型总结 # 1 存一个值or存多个值 # 可以存多个值,值都可以是任意数据类型 # # 2 有序or无序 #有序 # 3 可变or不可变 #不可变 names=('alex','egon','wxx','lxx','cxxx','lxx') # del names[0] #会报错,原因是元组不能被修改 :TypeError: 'tuple' object doesn't support item deletion # names[0]='sb' # print(names.count('lxx')) #count统计元组中指定元素的个数 # print(names.index('wxx',0,3)) #index统计指定切片内,指定元素的索引 # names=('alex','egon','wxx','lxx','cxxx','lxx') # names=1 #这不叫改元组值,只是对一个元组重新赋值 # l=[1,243,3] # # # l=3333 # l=['a','b','c'] # print(id(l)) # print(id(l[0])) #改变列表中元素的值,列表的id不会改变,但是列表中元素的id会改变 # l[0]='A' # print(id(l)) # print(id(l[0])) #列表可变是指内存地址是 # names=('a','b','c') # 列表可变的底层原理: #指的是索引所对应的值的内存地址是可以改变的 # 元组不可变的底层原理: #指的是索引所对应的值的内存地址是不可以改变的 #或者反过来说,只要索引对应值的内存地址没有改变,那么元组始终是没有改变的 # t1=(['a','b','c'],'wc','office') # # print(id(t1[0])) #元组中三个元素对应的id是不同的,id=2135396392648 # print(id(t1[1])) # print(id(t1[2])) # # # t1[0][0]='AAAA' #本质修改的是元组中列表中元素的值,并不是整体修改元组中一个元素的值 # print(t1) # # # print(id(t1[0])) #id=2135396392648 修改了元组中第一个列表中的值所以id是不变的
    #练习
    #队列:先进先出
    # l=[]
    # # 入队
    # # l.append('王苗鲁')
    # # l.append('王成龙')
    # # l.append('大脑门')
    # #出队
    # print(l.pop(0))
    # print(l.pop(0))
    # print(l.pop(0))
    #堆栈:先进后出
    # l=[]
    # #入栈
    # l.append('王苗鲁')
    # l.append('王成龙')
    # l.append('大脑门')
    # #出栈
    #
    # print(l.pop())
    # print(l.pop())
    # print(l.pop())
    
    
    
    
    msg_dic={
    'apple':10,
    'tesla':100000,
    'mac':3000,
    'lenovo':30000,
    'chicken':10,
    }
    
    shopping_cart=[]
    while True:
        for k in msg_dic:
            info='商品名:%s 价钱:%s' % (k, msg_dic[k])
            print(info.center(50,' '))
        name=input('请输入商品名>>: ').strip()
        if name not in msg_dic:
            # 输入的商品名不合法,打印提示信息并且直接进入下一次循环
            print('输了些什么玩儿。。。重输')
            continue
        # else:
        #     #输入的商品品合法,结束循环
        #     break
    
        while True:
            count=input('请输入购买个数:').strip()
            if count.isdigit():
                #输入个数合法
                count=int(count)
                break
            else:
                print('商品的个数必须为整数')
                # continue # 不加continue也会跳入下一次
    
    #    name,count
        for item in shopping_cart:
            # print(item)
            if name == item['name']:
                item['count']+=count
                break
        else:
            price=msg_dic[name]
            info={'name':name,'count':count,'price':price}
            shopping_cart.append(info)
        print(shopping_cart)
    字典类型
    #一:基本使用
    # 1 用途:用来存多个值,但每一个值都有一个key与之对应,key对值有描述性的功能
    #        当存储多个值表示的不同的状态时,
    #
    # 2 定义方式:{}内用逗号分隔开多个元素,每一个元素都是key:value的形式
    #value可以是任意数据类型,但是key必须为不可变类型,key通常应该是字符串类型,
    # d={'x':1,'y':2} #d=dict({'x':1,'y':2})
    # d=dict(a=1,b=2,c=3)       #通过dict可以创建字典
    # print(d)
    
    
    dic={1:'a',0:'b',1.1:'c',(1,2,3):'d'}
    # print(dic[1])        #数字也可以当做key值,但是这样会与索引产生误解,不能明确是通过key取value
    # print(dic[0])
    # print(dic[1.1])       #不可变类型都可以作为key值,但是通常我们使用字符串作为key值
    # print(dic[(1,2,3)])
    # dic={[1,2,3]:'a'}      #可变类型不可以作为key
    # dic={{'x':1}:'a'}
    
    #
    # 3 常用操作+内置的方法
    #优先掌握的操作:
    #1、按key存取值:可存可取
    # d={'y':2}
    # d['x']=100         #通过key来向字典中加入key:value,如果已经存在key:value,则会在原来的基础上对key对应的value值做替换
    # print(d)       #{'y': 2, 'x': 100}
    
    # d['z']=3
    # print(d)
    
    # d={'x':1,'y':2}
    # d['x']=100         #通过key来向字典中加入key:value,如果已经存在key:value,则会在原来的基础上对key对应的value值做替换
    # print(d)     #{'x': 100, 'y': 2}
    
    # l=['a','b']
    # l[2]='c'       #而列表不能通过索引添加值,报错是因为索引超出范围,IndexError: list assignment index out of range
    # l[1]='c'     #通过索引改变列表中指定位置的值
    # print(l)
    
    #2、长度len
    # d={'x':1,'y':2}
    # print(len(d))      #len也可以统计字典中元素的个数
    #3、成员运算in和not in
    # d={'x':1,'y':2}
    # print('x' in d)     #in判断一个字符是否在字典中的key值
    
    #4、删除
    # d={'x':1,'y':2}
    # del d['x']          #del通过key值来删除字典中的key:value
    # # print(d)
    # res=d.pop('y')         #pop通过key删除字典中的key:value,但会拿到删除'y':2中value的值2
    # print(d)
    # print(res)
    
    # res=d.popitem()     #popitem()默认会删除右边的key:value,也会拿到一个返回值,以key,value元组的形式返回('y', 2)
    # print(d)
    # print(res)
    
    # d={'a':1,'b':2,'c':3,'d':4}
    # for k in d:             #通过for循环取出字典中所有的key值
    #     print(k)
    
    # l=[1,2,3]            # del通过索引删除列表中的元素
    # del l[1]
    # print(l)
    
    #5、键keys(),值values(),键值对items()
    msg_dic={
    'apple':10,
    'tesla':100000,
    'mac':3000,
    'lenovo':30000,
    'chicken':10,
    }
    # names=[]
    # for k in msg_dic:  #通过for循环把字典中的key值取出来,在通过append把取出的key值添加到空列表中
    #     names.append(k)
    # print(names)         #['apple', 'tesla', 'mac', 'lenovo', 'chicken']
    # values=[]
    # for k in msg_dic:    #通过for循环取出key值,在通过append将value加入到空列表中
    #     values.append(msg_dic[k])
    # print(values)
    
    # keys=msg_dic.keys()    #通过keys取出一只老母鸡dict_keys(['apple', 'tesla', 'mac', 'lenovo', 'chicken'])
    # print(keys)
    # for k in keys:     #在循环老母鸡就可以取出字典中的key值
    #     print(k)
    # l=list(keys)        #通过list可以将老母鸡转换成一个列表['apple', 'tesla', 'mac', 'lenovo', 'chicken']
    # print(l)
    #
    # vals=msg_dic.values()    #通过values取出一只老母鸡dict_values([10, 100000, 3000, 30000, 10])
    # print(vals)
    # print(list(vals))    #同过list将老母鸡的value转换成一个列表[10, 100000, 3000, 30000, 10]
    
    # print(msg_dic.items())    #通过items取出一只老母鸡dict_items([('apple', 10), ('tesla', 100000), ('mac', 3000), ('lenovo', 30000), ('chicken', 10)])
    # print(list(msg_dic.items()))   #通过list将老母鸡转换成一个列表,列表中的元素以小元组的形式存在[('apple', 10), ('tesla', 100000), ('mac', 3000), ('lenovo', 30000), ('chicken', 10)]
    #6、循环
    msg_dic={
    'apple':10,
    'tesla':100000,
    'mac':3000,
    'lenovo':30000,
    'chicken':10,
    }
    # 只取key
    # for k in msg_dic:      #循环字典本质就是循环字典中的key值
    #     print(k,msg_dic[k])
    
    # for k in msg_dic.keys():
    #     print(k,msg_dic[k])
    
    # 只取value
    # for v in msg_dic.values():  #通过点values循环出字典中的所有value值
    #     print(v)
    
    #取key和value
    # for k,v in msg_dic.items(): #k,v=('apple', 10)  变量的解压
    #     print(k,v)       #通过点items取出加for循环取出字典中的key和value值
    
    # 需要掌握的内置方法(****)
    # d={'x':1,'y':2,'z':3}
    # v=d.get('xxxx')         #点get的方法和通过key取value值得功能一样,只是get通过key取值是如果key不存在,不会报错
    # print(v)
    # print(d['xxxxxxx'])   #key值不存在,取不到value就会报错KeyError: 'xxxxxxx'
    
    # d={'x':1,'y':2,'z':3}
    # d1={'a':1,'x':1111111}
    # d.update(d1)     #update会更新原有字典中的key:value,存在则更新,不存在加入到原字典中
    # print(d)        #{'x': 1111111, 'y': 2, 'z': 3, 'a': 1}
    
    # l=['name','age','sex']
    # d={}
    # for k in l:
        # d[k]=None
    # print(d)            #打印结果{'name': None, 'age': None, 'sex': None}
    
    # d=dict.fromkeys(l,None)    #不使用for循环,使用dict.fromkey也可以实现将一个列表转换成字典,并给不同的key加上默认的value值
    # d=dict.fromkeys(l,18)      #{'name': 18, 'age': 18, 'sex': 18}
    # print(d)
    
    
    # info.setdefault
    # info={'name':'egon','age':18,'sex':'male'}
    
    # 如果字典中有setdefault指定的key,那么不改该key对应的值,返回原的value
    # res=info.setdefault('name','EGON_NB')
    # print(info)
    # print(res)
    
    # 如果字典中没有setdefault指定的key,那么增加一个key:value,返回新的value
    # info.setdefault('height',1.80)
    # print(info)
    #
    # info={'age':18,'sex':'male'}
    # v=info.setdefault('name','浩哥')       #因为字典中没有('name','浩哥'),setdefault就会将其放入字典中,并将新的value值返回
    # print(v)          #浩哥
    # print(info)       #{'age': 18, 'sex': 'male', 'name': '浩哥'}
    
    
    
    # 统计串中各个单词的个数
    # s='hello alex alex say hello sb sb'
    # l=s.split()         #split将字符串切分成列表
    # print(l)           #['hello', 'alex', 'alex', 'say', 'hello', 'sb', 'sb']
    # d={}
    # for word in l: #word=  'hello'         #循环列表拿到每一个单词
    #     if word not in d:                  #判断单词是否在字典中
    #         d[word]=1 #{'hello':2, 'alex':2,'say':1}     #不在则说明是一个新的单词,将其以key:value的形式刚入到字典中去
    #     else:
    #         d[word]+=1                            #字典中已经存在的单词,对其value加一操作,即单词的个数
    # print(d)             #{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
    
    
    # s='hello alex alex say hello sb sb'
    # l=s.split()
    # print(l)
    # d={}
    # d={'hello':2,'alex':2}
    # for word in l: #word='alex'        #循环取出列表中的单词
    #     # d[word]=l.count(word) #d['alex']=2     #通过count统计列表中某个单词的个数,将写进到字典中单词对应的value值(方法一)
    #     d.setdefault(word,l.count(word))      #将key,value放到字典中(方法二)
    # print(d)
    
    
    # #二:该类型总结
    # 1 存一个值or存多个值
    #     可以存多个值,值都可以是任意类型,而key必须是不可变类型,通常应该是不可变类型中字符串类型
    #
    # 2 有序or无序
    # 无序
    #
    # 3 可变or不可变
    
    # d={'x':1,'y':2}
    # print(id(d))
    # d['x']=1111
    # print(id(d))
    
    # d=123
  • 相关阅读:
    闭包跟装饰器
    几个常见的面试题目
    函数的进阶
    python的生成器和迭代器
    Python的数据类型
    “随手记”开发记录day09
    “随手记”开发记录day08
    “随手记”开发记录day07
    “随手记”开发记录day06
    “随手记”开发记录day05
  • 原文地址:https://www.cnblogs.com/sui776265233/p/9118815.html
Copyright © 2011-2022 走看看