python基础-字典、enumerate、is和==区别、编码问题、一些有迷惑的方法

来源:互联网 发布:js date 时间戳 编辑:程序博客网 时间:2024/06/08 05:48

          • 字典
        • fromkeys
        • 一些容易混淆方法
        • enumerate枚举
        • is 区别
        • 编码问题

字典
#字典的键是可哈希的,就是不可变数据类型 str,数字体,bool,元组#键是唯一的print("----------------")dic = {"name":"aaaa",       "skill":["pthon","go"],       "hobby":("sing","internet"),        True:"aa",        3:"bb",        1:"dd",       (1,2):"cc"       }print(dic["name"])print(dic["skill"])print(dic["hobby"])print(dic[True])#?为啥不输出"aa"?如何让它输出"aa"?print(dic[3])print(dic[(1,2)])print(dic[1])####嵌套print("----####嵌套-------")print(dic["hobby"][0])dic = {"name":"safly",       "skill":["pthon","go"],       "hobby":("sing","internet")       }print("#############增1############")dic["weigh"] = 75print(dic)#增2--'k': Nonedic.setdefault("k")print(dic)dic.setdefault("m","n")print(dic)#如果字典中有name,不会做操作,没有的话就需要添加dic.setdefault("name")print(dic)print("###############删###########")dic.pop("skill")print(dic)#如果没有要删除的键,会报错# dic.pop("skill")a = dic.pop("skill","没有该键,该方法但不报错")print(a)#随机删除一个键值对dic.popitem()print(dic)del dic["hobby"]print(dic)#清空# dic.clear()# print(dic)print("###############改###########")dic["name"] = "jinxing"print(dic)#update把dic1的键值对添加并覆盖到dic中dic1 = {"name":"jjkk","ddsfsdf":"gegew"}dic.update(dic1)print(dic)print(dic1)print("############查############")print(dic["name"])#如果不存在name1键,就会报错# print(dic1["name1"])print(dic.get("name"))#没有键值对返回None,但是不报错print(dic.get("sdfsdf"))print(dic.get("sf","没有这个键盘"))print("############获取所有的键############")keys = dic.keys()print(keys)print(type(keys))for key in keys:    print(key)print("############获取所有的值############")values = dic.values()print(values)for i in values:    print(i)print("---获取所有的键-----")for i in dic:    print(i)print("-------循环dic.items--------")print(dic.items())####循环获取里面的元组####for i in dic.items():    print(i)####循环获取里面的元组的键值对####for key,vlalue in dic.items():    print(key,vlalue)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/safly.py----------------aaaa['pthon', 'go']('sing', 'internet')ddbbccdd----####嵌套-------sing#############增1############{'name': 'safly', 'skill': ['pthon', 'go'], 'hobby': ('sing', 'internet'), 'weigh': 75}{'name': 'safly', 'skill': ['pthon', 'go'], 'hobby': ('sing', 'internet'), 'weigh': 75, 'k': None}{'name': 'safly', 'skill': ['pthon', 'go'], 'hobby': ('sing', 'internet'), 'weigh': 75, 'k': None, 'm': 'n'}{'name': 'safly', 'skill': ['pthon', 'go'], 'hobby': ('sing', 'internet'), 'weigh': 75, 'k': None, 'm': 'n'}###############删###########{'name': 'safly', 'hobby': ('sing', 'internet'), 'weigh': 75, 'k': None, 'm': 'n'}没有该键,该方法但不报错{'name': 'safly', 'hobby': ('sing', 'internet'), 'weigh': 75, 'k': None}{'name': 'safly', 'weigh': 75, 'k': None}###############改###########{'name': 'jinxing', 'weigh': 75, 'k': None}{'name': 'jjkk', 'weigh': 75, 'k': None, 'ddsfsdf': 'gegew'}{'name': 'jjkk', 'ddsfsdf': 'gegew'}############查############jjkkjjkkNone没有这个键盘############获取所有的键############dict_keys(['name', 'weigh', 'k', 'ddsfsdf'])<class 'dict_keys'>nameweighkddsfsdf############获取所有的值############dict_values(['jjkk', 75, None, 'gegew'])jjkk75Nonegegew---获取所有的键-----nameweighkddsfsdf-------循环dic.items--------dict_items([('name', 'jjkk'), ('weigh', 75), ('k', None), ('ddsfsdf', 'gegew')])('name', 'jjkk')('weigh', 75)('k', None)('ddsfsdf', 'gegew')name jjkkweigh 75k Noneddsfsdf gegewProcess finished with exit code 0

fromkeys

print("----------")dic = dict.fromkeys("abc",["aaa"])print(dic)print("----------")dic = dict.fromkeys(("abc"),["a","b"])print(dic)print("----------")dic = dict.fromkeys(["a","c"],[])print(dic)dic["a"].append("aaa")dic["c"].append("bbb")dic["d"] = ["ccc"]dic["a"] = ["aaaagg"]print(dic)print("----------")dic = dict.fromkeys([1,2,3],"杨姐")dic[1]="ss"print(dic)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/demo.py----------{'a': ['aaa'], 'b': ['aaa'], 'c': ['aaa']}----------{'a': ['a', 'b'], 'b': ['a', 'b'], 'c': ['a', 'b']}----------{'a': [], 'c': []}{'a': ['aaaagg'], 'c': ['aaa', 'bbb'], 'd': ['ccc']}----------{1: 'ss', 2: '杨姐', 3: '杨姐'}Process finished with exit code 0

一些容易混淆方法

tu3 = (2)tu1 = ("aaa",1)tu = ("aaa",)tu4 = (True)tu5 = ([1,3,4])print(type(tu))print(type(tu1))print(type(tu3))print(type(tu4))print(type(tu5))a,b = [1,2]print(a,b)a,b = (3,4)print(a,b)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/demo.py<class 'tuple'><class 'tuple'><class 'int'><class 'bool'><class 'list'>1 23 4

enumerate枚举

li = ["dfdf","32fd","df"]for i in enumerate(li):    print(i)print("#############dic#################")dic = {"a":"aa","b":"bb"}for i in enumerate(dic):    print(i)for i in enumerate(dic.keys()):    print(i)for i in enumerate(dic.values()):    print(i)print("------元组的方式输出---")for i in enumerate(dic.items()):    print(i)print("------非元组的方式输出---")for i,j in enumerate(dic.items()):    print(i,j)print("-----for dic.items------")print(dic.items())for i in dic.items():    print(i)print("-----for v,k dic.items------")for v,k in dic.items():    print(v,k)print("-----for i keys------")print(dic.keys())for i in dic.keys():    print(i)print("-----for i values------")print(dic.values())for i in dic.values():    print(i)print("-----for i dic------")print(dic)for i in dic:    print(i,type(i))print("#############str#################")#第二个参数是从索引开始str = "sfjwrejlwer"for i in enumerate(str,2):    print(i)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/demo.py(0, 'dfdf')(1, '32fd')(2, 'df')#############dic#################(0, 'a')(1, 'b')(0, 'a')(1, 'b')(0, 'aa')(1, 'bb')------元组的方式输出---(0, ('a', 'aa'))(1, ('b', 'bb'))------非元组的方式输出---0 ('a', 'aa')1 ('b', 'bb')-----for dic.items------dict_items([('a', 'aa'), ('b', 'bb')])('a', 'aa')('b', 'bb')-----for v,k dic.items------a aab bb-----for i keys------dict_keys(['a', 'b'])ab-----for i values------dict_values(['aa', 'bb'])aabb-----for i dic------{'a': 'aa', 'b': 'bb'}a <class 'str'>b <class 'str'>#############str#################(2, 's')(3, 'f')(4, 'j')(5, 'w')(6, 'r')(7, 'e')(8, 'j')(9, 'l')(10, 'w')(11, 'e')(12, 'r')Process finished with exit code 0

is ==区别

str = "safly"#内存地址print(type(str),id(str))#== iss1 = "alex"s2 = "alex"#==比较的值print(s1 == s2)#比较的内存地址print(s1 is s2)print(id(s1),id(s2))#-5到256 同一个内存地址,pychar优化了,是同一个内存地址值print("----------")num = 1num1 = 1print(num is num1)num = 256num1 = 256print(num is num1)num = -5num1 = -5print(num is num1)nu = 259nu1 = 259print(nu is nu1)print(id(nu),id(nu1))print("----------")#########列表、字典、元组、集合内存地址不一样##############s1= [1,3]s2 = [1,3]print(s1 == s2)print(s1 is s2)print(id(s1),id(s2))

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/demo.py<class 'str'> 2319200TrueTrue16064928 16064928----------TrueTrueTrueTrue3990112 3990112----------TrueFalse4193136 4193176Process finished with exit code 0

由于pychar优化了,我们看下在doc命令行中看看内存地址is方法的区别
这里写图片描述

另外字符这里需要补充下字符串不能有空格、字符长度不能超过20,不能有特殊字符
这里写图片描述

编码问题

  py3:    unicode   A :00000000 00000000 00000000 00001001 四个字节             中 :00000000 00001000 00000000 00000001 四个字节    utf-8     A      :00000001 一个字节             欧洲@   : 00000010 00000001 两个字节             亚洲 中 : 00001000 00000000 00000001 三个字节             中国:00001000 00000000 00000001 00001001 00000000 00000001    gbk       A :00000000 00001001 两个字节             中 :00000000 00100001 两个字节     不同的编码之间是不能相互识别,会产生乱码。     存储,传输的:utf-8,或者 gbk,或者是gb2312,或者是其他(绝对不是unicode)。

我们看一个简单的例子

s = 'Q'b1 = s.encode('utf-8')print(b1)b2 = s.encode('gbk')print(b2)s1 = '晓梅'b11 = s1.encode('utf-8')print(b11)s2 = '晓梅'b22 = s1.encode('gbk')print(b22)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/demo.pyb'Q'b'Q'b'\xe6\x99\x93\xe6\xa2\x85'b'\xcf\xfe\xc3\xb7'Process finished with exit code 0

简单分析下

py3:    int        bytes  表现形式: s = b'alex' 内部存储是(utf-8,gbk,gb2312.....)010101                    s1 = '晓梅'                    b11 = s1.encode('utf-8')               表现形式: s = b'\xe6\x99\x93\xe6\xa2\x85'  (utf-8,gbk,gb2312.....)010101                            0000 1000 0000 0000 0000 0001 0000 1001 0000 0000 0000 0001                     s2 = '晓梅'                    b22 = s1.encode('gbk')                    print(b22)                         b'\xcf\xfe\xc3\xb7'               表现形式: s = b'\xcf\xfe\xc3\xb7'  (utf-8,gbk,gb2312.....)010101                       0000 1000 0000 0000 0000 0001 0000 1001        str    表现形式: s = 'alex' 内部存储是 unicode 0101010
阅读全文
0 0
原创粉丝点击