某些运算符,可变基本数据类型/不可变基本数据类型, 自定义数据类型
运算符
Python中比较特别的
幂3² 表示为 3**2
商的整数部分 例如10//3 = 3
还有诸如“%=” “**=” “//=”
逻辑运算“且,或,非” : “and” “or” “not”
判断元素是否在列表或字典中: "in" "not in"
判断数据类型“is” “not is” 例如: type("aaaa") is str 为 True
不可变基本数据类型 (不可变对象,创建对象时没有写类名,例如a=1,b="hello")
int
Python3 里面不论多大的数都是 int型 Python2 里面int存超了自动转为long
float
float是不可变对象
字符串
常用的方法,一些蛋疼的方法就不说了,翻翻笔记
name = "al\tEx li" print(name.count("l")) # 统计'l'的个数************************************** print(name.center(50, "-")) # 把name放在50个“-”中间****************************** print(name.find("l")) # 找出第一个l的位置************************************** print(name.rfind("l")) # 找出最后一个l的位置*********************************** print(name[name.find("l"):]) # 字符串切片**************************************** print(name.isdigit()) # 判断是否为整数****************************************** print("+".join(['1', '2', '3'])) # 用+号将列表内的元素连接成一个字符串**************** print("1+2+3".split("+")) # 按+号将字符串分割成一个列表************************** print(name.strip()) # 去掉两边空格及换行符******************************* print(name.lstrip()) # 去掉左边空格及换行符******************************* print(name.rstrip()) # 去掉右边空格及换行符******************************* print(name.splitlines()) # 按换行来分割字符串变成列表类型,Windows跟Linux换行符不一样可以用一用
字符串截取:
name1 = ["a","b","c","d","e","f","g","h"] #列表等也可以同样的方法截取
name = "abcdefgh" print(name[1:3]) #取出bc 顾首不顾尾 print(name[:3])# 省略0 取出前三个 abc print(name[-3:-1]) #从右往左取出fg print(name[-3:]) #省略0 取出后三个 fgh print(name[0:-1:2]) #隔两个取一个 0开头 -1结尾 2步长 aceg print(name[::3]) #从头到尾按步长3取出 adf
布尔值
True / False
bytes
Bytes 对象是由单个字节(8位,取值范围 0-255)作为基本元素组成的序列。例如:一个汉字用UTF8编码为3个bytes,两个汉字就是6个bytes。
# 可以对bytes进行切片因为8位是基本单位: a = '徐' b = bytes(a, 'utf-8') print(b[:1]) # 输出:b'\xe5'
bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。
ASCII 字符串,可以直接使用 b'xxxx' 赋值创建 bytes 实例,非 ASCII 编码的字符则不能通过b'xxxx'这种方式创建 bytes 实例
a = '徐' b = bytes(a, 'utf-8') c = bytes(a, 'gb2312') d = b'http://www.ku.ac.cn' print(b) print(c) print(d) #用utf-8解码bytes,如果用b.decode('gbk')会报错: print(b.decode('utf-8')) # 输出: # b = b'\xe5\xbe\x90' # c = b'\xd0\xec' # d = b'http://www.ku.ac.cn' # 徐
Python3中,默认是Unicode编码utf8解码。
s = "你好" #默认Unicode编码,utf-8解码 s_to_unicode=????? #无法实现,因为已经是Unicode s_to_gbk = s.encode("GBK") #从Unicode直接变成gbk, bytes类型 s_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") # 或者 s_to_utf8 = s.encode("utf-8")
Python2中,是操作系统默认编码(不写#-*- encoding:utf-8 -*-的话)
s="你好" # 默认操作系统编码gbk s_to_unicode = s.decode("GBK") # 转成Unicode s_to_utf8 = s.decode("GBK").encode("utf8") # 先转成Unicode才能转成utf8
元祖
names = ("a" , "b" , "c")
只能读,不能删元素,修改,增加。 如果有一些数据希望程序启动后不能被修改,可以用元祖存放。
可变基本数据类型 (可变对象,创建对象时也没有写类名,例如a=[1,2],b={1:'a',2:'b'})
列表
names = ["a" , "b" , "c",“d”,“e”,“f”,“g”,“h”]
切片:
name = ["a","b","c","d","e","f","g","h"] print(name[1:3]) #取出b c 顾首不顾尾 print(name[:3])# 省略0 取出前三个 a b c print(name[-3:-1]) #从右往左取出f g print(name[-3:]) #省略0 取出后三个 f g h print(name[0:-1:2]) #隔两个取一个 0开头 -1结尾 2步长 print(name[::3]) #从头到尾按步长3取出
追加: names. append ("g")
插入:names . insert(1,"ccc") 在1的位置插入ccc
删除: del names[1] 或者 names.pop(1)
找元素位置: names.index("b")
找元素个数:names .count("d")
列表反转顺序: names.reverse() 这个有什么卵用吗???
排序: names.sort()
合并: names.extend(names1)
复制: 列表里包含列表。 注意有浅复制和深复制。
浅复制,name.copy() 复制列表内元素列表的指针,所以一改俱改。
深复制,import copy names2 = copy.deepcopy(name) 完全复制,改源列表元素不会影响复制后的列表
字典
用列表中包括列表,不能根据元素列表的某个值找到该元素列表的下标,可以用字典来解决。
key为字符串,value为任意类型
定义: info = {"key1":value1 , "key2":value2 , “key3”:value3 }
增: info["key4"] = value4
删: del info["key4"] 或 info.pop("key4")
改: info["key4"] = values
查: info["key1"] 确定有key1才用
info.get("key1") 有就返回value1没有返回none
其他方法: info.values() ,返回所有的values
info.keys() 返回所有keys
info.setdefault(“key”,value) 添加一个新值,返回value,key重复则不修改旧值,返回旧value
info. update(b) 把b字典合并到info里面,如果有key重复的更新value,不重复的合并
info.items()把字典转换成列表,key为第一个元素
dict.formkeys([6,7,8] , "test")
相当于{ 8:'test" , 6:"test" , 7:"test"} 3个key共享一个内存地址,如果“test”为列表或字典的话,也是一改俱改
集合
-
初始化
list = [ 1, 2,3,4,5 ]
set1 = set ( list )
-
集合的逻辑关系
求交集: set3 = set1.intersection(set2) 或者 set3 = set1 & set2
求并集:set1.union(set2) 或者 set1 | set2
求差集:set6 = set1.difference(set2) 或者 set6 = set1 - set2
set5 = set2.difference(set1) 或者 set5 = set2 - set1
求对称差集: set5 + set6 = set1.symmetric_difference(set2) 或者 set5+set6 = set1 ^ set2
判断a是不是b的子集:a.issubset(b) 或者是判断b是不是a的父集, b.issuperset(a)
判断ab是否有交集: a.isdisjoint(b) 无交集返回TRUE 有交集返回FALSE
-
集合的方法
长度:len(set) , 判断元素是否在set里:x in set , 浅复制:set.copy()
增:set.add("aaaa")
set.update( [1,2,3,4,5] )
删:set.remove("aaa") 没有aaa报错 , set.discard("aaa") 没有aaa返回none
很神奇 , 没有改和查。。看来是不能直接在集合里改和查