python基础-字典、enumerate、is和==区别、编码问题、一些有迷惑的方法
2017-10-25 16:07
681 查看
字典
fromkeys
一些容易混淆方法
enumerate枚举
is 区别
编码问题
字典
输出如下:
输出如下:
输出如下:
输出如下:
输出如下:
由于pychar优化了,我们看下在doc命令行中看看内存地址is方法的区别
另外字符这里需要补充下字符串不能有空格、字符长度不能超过20,不能有特殊字符
我们看一个简单的例子
输出如下:
简单分析下
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"] = 75 print(dic) #增2--'k': None dic.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') dd bb cc dd ----####嵌套------- 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'} ############查############ jjkk jjkk None 没有这个键盘 ############获取所有的键############ dict_keys(['name', 'weigh', 'k', 'ddsfsdf']) <class 'dict_keys'> name weigh k ddsfsdf ############获取所有的值############ dict_values(['jjkk', 75, None, 'gegew']) jjkk 75 None gegew ---获取所有的键----- name weigh k ddsfsdf -------循环dic.items-------- dict_items([('name', 'jjkk'), ('weigh', 75), ('k', None), ('ddsfsdf', 'gegew')]) ('name', 'jjkk') ('weigh', 75) ('k', None) ('ddsfsdf', 'gegew') name jjkk weigh 75 k None ddsfsdf gegew Process 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 2 3 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 aa b bb -----for i keys------ dict_keys(['a', 'b']) a b -----for i values------ dict_values(['aa', 'bb']) aa bb -----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)) #== is s1 = "alex" s2 = "alex" #==比较的值 print(s1 == s2) #比较的内存地址 print(s1 is s2) print(id(s1),id(s2)) #-5到256 同一个内存地址,pychar优化了,是同一个内存地址值 print("----------") num = 1 num1 = 1 print(num is num1) num = 256 num1 = 256 print(num is num1) num = -5 num1 = -5 print(num is num1) nu = 259 nu1 = 259 print(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'> 2319200 True True 16064928 16064928 ---------- True True True True 3990112 3990112 ---------- True False 4193136 4193176 Process 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.py b'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
相关文章推荐
- leetcode-1:python基础,循环、条件、列表、字典的应用,enumerate、range函数以及2.0和3.0print的区别
- python常见编码问题解决方法
- python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
- python 零散记录(四) 强调字典中的键值唯一性 字典的一些常用方法
- Python字典方法copy()和deepcopy()的区别
- python解决字典中的值是列表问题的方法
- 服务器配置python时一些问题的处理方法 [转]
- python基础(文件输入/输出 内建类型 字典操作使用方法)
- python的一些问题解决方法
- 【python】中文的输出,打印,文件编码问题解决方法
- Python中用eval将字符串转换为字典时候出错:NameError: name ‘null’ is not defined的解决方法
- Sublime和Python中文编码的一些问题
- 关于一些基础的js对象的属性和方法问题
- Python中文编码过程中遇到的一些问题
- 服务器配置python时一些问题的处理方法
- Python学习入门基础教程(learning Python)--8.3 字典常用的方法函数介绍
- Python连接mssql数据库编码问题解决方法
- java基础问题----"=="和equals方法究竟有什么区别
- Python安装Imaging报错:The _imaging C module is not installed问题解决方法
- Python基础之---运算符与用法及编码问题